我在这里为 Gtk 3 使用 python 和 PyGObjects(自省库)。
考虑以下代码:
from gi.repository import Gtk
class InternalWidget(Gtk.Button):
def __init__(self):
super(InternalWidget, self).__init__()
self.set_size_request(100,100)
self.connect("button-press-event", self.on_press)
def on_press(self, *args):
print "The Internal Widget was clicked."
class ExternalEventBox(Gtk.EventBox):
def __init__(self):
super(ExternalEventBox, self).__init__()
self.fixed = Gtk.Fixed()
self.add(self.fixed)
self.internal_widget = InternalWidget()
self.set_size_request(200, 200)
self.connect("button-press-event", self.on_press)
self.connect("enter-notify-event", self.on_enter)
self.connect("leave-notify-event", self.on_leave)
def on_enter(self, *args):
self.fixed.put(self.internal_widget, 50,50)
self.show_all()
def on_leave(self, *args):
self.fixed.remove(self.internal_widget)
def on_press(self,*args):
print "The External Event Box was clicked."
w = Gtk.Window(Gtk.WindowType.TOPLEVEL)
w.connect("delete-event", Gtk.main_quit)
w.add(ExternalEventBox())
w.show_all()
Gtk.main()
上面,每当鼠标进入 时,都会将ExternalEventBox
一个按钮 ( InternalWidget
) 作为子项添加到其中。当鼠标离开 时ExternalEventBox
,按钮将作为 的子项移除ExternalEventBox
。
现在,如果你运行代码(你可以),按钮会正确出现和消失。但是,与预期相反,单击按钮只会向包含 发送信号ExternalEventBox
,而按钮则不会收到信号。
有趣的是,预期的行为(点击按钮实际上点击它)发生在按钮,而不是动态添加和删除,在事件框的构造函数中添加一次,并且从未删除。
这是一个错误,还是我只是错过了什么?
编辑:简而言之,我只得到“外部事件框被点击。”,但从来没有“内部小部件被点击。”。
更新:我提交了一个错误报告。