进口Gtk后进入Gdk区域并关闭风

2024-05-01 21:57:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我发现自己需要关闭一个从Gtk.Window子类化的窗口。我正在连接窗口.销毁事件来关闭窗口以进行测试,但是当我将模块加载到主程序中时,当然,如果不关闭主程序,我就不能这样做。当我写一个函数时,我愚蠢地调用了window.destroy()方法,这是我的愚蠢,导致了最大递归错误。所以,我决定连接一个'delete event',然后调用window.destroy(),它仍然递归,因为(正如我所了解到的)destroy事件调用delete event。因此,我将destroy事件连接到一个函数并尝试调用:

window.emit('delete-event')

这起作用了,但是在需要另一个参数时导致了一个错误。通过研究,我从gtk2了解到它需要这样:

^{pr2}$

我找不到Gtk下面的Gdk,就像我可以在gtk下面找到{}。我不喜欢这样。我导入了Gdk并且找到了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以上的学习目的。在

谢谢

纳尼


Tags: 模块函数ineventgtk错误事件window
1条回答
网友
1楼 · 发布于 2024-05-01 21:57:34

gtk3中没有gtk.gdk,所有这些功能或其等效功能必须使用from gi.repository import Gdk可用。前面的gtk.gdk层次结构实际上是为了方便,但是没有任何意义,因为GDK是一个完全独立的包,不是GTK的一部分。新的组织更有意义,因为层次结构和变量名与C、Javascript等API中的完全相同。在

在本例中,gtk.gdk.DELETE可用作Gdk.EventType.DELETE,因此您应该能够

window.emit('delete-event', Gdk.Event(Gdk.EventType.DELETE))

但是,you are not supposed to emit event signals yourself,所以最好这样做:

^{pr2}$

或者更好的做法是,不要在模块中连接事件。然后可以使用window.destroy(),而不会出现递归错误。连接到主程序中的destroy信号,然后您可以简单地调用Gtk.main_quit。在

相关问题 更多 >