我发现自己需要关闭一个从Gtk.Window
子类化的窗口。我正在连接窗口.销毁事件来关闭窗口以进行测试,但是当我将模块加载到主程序中时,当然,如果不关闭主程序,我就不能这样做。当我写一个函数时,我愚蠢地调用了window.destroy()
方法,这是我的愚蠢,导致了最大递归错误。所以,我决定连接一个'delete event',然后调用window.destroy()
,它仍然递归,因为(正如我所了解到的)destroy事件调用delete event。因此,我将destroy事件连接到一个函数并尝试调用:
window.emit('delete-event')
这起作用了,但是在需要另一个参数时导致了一个错误。通过研究,我从gtk2了解到它需要这样:
^{pr2}$我找不到Gtk
下面的Gdk
,就像我可以在gtk
下面找到{Gdk.Event
,但是没有与{
l = dir(Gdk)
for i in l:
if 'DELETE' in i:
print(i)
并且在Gdk中没有定义DELETE变量。在
我们如何从Gtk访问Gdk?如果没有,我们怎么翻译gtk.gdk公司... Gdk下不存在的东西?在
我最终做到了:
del window
做我需要做的,但我仍然想知道如何做的发射信号在Gtk3以上的学习目的。在
谢谢
纳尼
gtk3中没有
gtk.gdk
,所有这些功能或其等效功能必须使用from gi.repository import Gdk
可用。前面的gtk.gdk
层次结构实际上是为了方便,但是没有任何意义,因为GDK是一个完全独立的包,不是GTK的一部分。新的组织更有意义,因为层次结构和变量名与C、Javascript等API中的完全相同。在在本例中,
gtk.gdk.DELETE
可用作Gdk.EventType.DELETE
,因此您应该能够但是,you are not supposed to emit event signals yourself,所以最好这样做:
^{pr2}$或者更好的做法是,不要在模块中连接事件。然后可以使用
window.destroy()
,而不会出现递归错误。连接到主程序中的destroy信号,然后您可以简单地调用Gtk.main_quit
。在相关问题 更多 >
编程相关推荐