不使用GTK处理GDK事件
我正在用Python编程,使用GDK而不使用GTK,简单来说就是在做一个X11的抽象。这篇帖子是我最后的机会。
我的问题是,我不知道怎么捕捉GDK窗口的信号或事件,也不知道它们的名字是什么。
当我这样做的时候:
window = gdk.Window(
gdk.get_default_root_window(),
width=400,
height=200,
window_type=gdk.WINDOW_CHILD,
wclass=gdk.INPUT_OUTPUT,
event_mask=gdk.KEY_PRESS_MASK | gdk.MOTION_NOTIFY | gdk.EXPOSURE_MASK)
window.connect("key_press_event", on_key)
我得到的是:
unknown signal name: key_press_event
关于GTK和PYGTK的资料提到了类、函数和常量,但没有讲它们之间的关系,所以对我没有帮助。难道是和glib主循环有关吗?
我需要一些例子。有好的GDK教程或者源代码吗?有没有glib.MainLoop的例子可以用来捕捉GDK信号?
谢谢。
2 个回答
1
你正在尝试连接一个叫做 key-press-event
的信号,这个信号属于 gtk.Widget
。但是,gdk.Window
并不是从 gtk.Widget
继承来的,所以它没有这个信号。
在GTK的文档中,顶部有一些小部分叫做“对象层次结构”,它们告诉你这些类之间是如何关联的。其实并没有真正的GDK教程,因为你几乎总是和GTK一起使用它。我觉得单独使用GDK也没什么太大用处。也许你可以详细说明一下你想要实现的目标?
1
你可以使用 gdk_event_handler_set 来设置事件处理程序(这个处理程序也是 gtk 使用的函数)。我不知道你用的是哪个 Python 绑定,但我觉得你可以很容易找到对应的 Python 函数。(在 gi 中,它就是 Gdk.Event.handler_set)
你可以在 这里 查看一个例子(那里还有一个非阻塞的例子)。虽然这些例子是用 C 语言写的。