2

我发现自己处于需要关闭从Gtk.Window. 我最初连接 window.destroy 事件以关闭窗口以Gtk.main_quit进行测试,但是当我将模块加载到我的主程序中时,当然,如果不关闭主程序,我就不能这样做。当我编写一个函数时,我愚蠢地调用了该window.destroy()方法,这对我来说很愚蠢,导致最大递归错误。所以,我决定连接一个“删除事件”,然后调用window.destroy()它仍然递归,因为(据我所知)销毁事件调用删除事件。因此,我将销毁事件连接到一个函数并尝试调用:

window.emit('delete-event')

这有效,但导致需要另一个参数的错误。研究,我从 gtk2 了解到它需要是这样的:

window.emit("delete-event", gtk.gdk.Event(gtk.gdk.DELETE))

我找不到GdkunderGtk就像我可以找到gdkunder一样gtk。我不喜欢这个。我导入了 Gdk 并Gdk.Event找到了,但不等同于gtk.gdk.DELETE variable. 我做了一个:

l = dir(Gdk)
for i in l:
    if 'DELETE' in i:
        print(i)

并想出在 Gdk 中没有定义 DELETE 变量。

我们如何从 Gtk 访问 Gdk?如果不是,我们如何翻译这些 gtk.gdk... 在 Gdk 下不存在的东西?

最终,我只是做了:

del window

做我需要做的事情,但我仍然想知道如何在 Gtk3 中发出上面的信号以用于学习目的。

谢谢,

纳尼

4

1 回答 1

1

GTK 3中没有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))

但是,您不应该自己发出事件信号,所以最好这样做:

window.event(Gdk.Event(Gdk.EventType.DELETE))

或者更好的是,根本不连接到模块中的事件。然后你可以使用window.destroy()没有递归错误。连接到主程序中的销毁信号,然后您可以简单地调用Gtk.main_quit.

于 2013-01-03T09:39:40.610 回答