我用numbox = Gtk.VBox(spacing = 10)
行创建了Gtk.VBox
容器,并在其中添加了太多的小部件和按钮小部件。但是当我在任何按钮小部件上单击一次numbox.connect("button-press-event", print_widget_prop)
代码行不工作时。但是当我在任何一个按钮上点击两三次,这个代码行就可以工作了。为什么当我单击按钮时,这个代码行不起作用?在
示例
from Gtk3Modules import * # this code line imports Gtk, Gdk, ... module
def do_anything(wid, event):
print("clicked", event.get_click_count()[1], "times")
w = Gtk.Window(title="_Simple_Window_")
w.connect("delete-event", Gtk.main_quit)
evbox = Gtk.EventBox()
evbox.connect("button-press-event", do_anything)
w.add(evbox)
vb = Gtk.VBox()
evbox.add(vb)
lb = Gtk.Label("I am a label")
vb.add(lb)
btn = Gtk.Button("I am a button\nWhen You Single Click me do_anything function not work !")
vb.add(btn)
w.show_all()
Gtk.main()
作为对gtknerd答案的补充。在
这可能是个bug。事实上,他对你的另一个问题的回答是他建议把按钮包装在Gtk.事件框然后使用方法
set_above_child
来完成这个任务。在总之,我的补充是您的方法
do_anything
不完整。实际上,您需要返回True或False:发生这种情况是因为
button-press-event
回调返回一个布尔值来指示信号是否应该传播到父窗口小部件。在例如,如果将回调设置为
^{pr2}$btn
button-press-event
事件,然后返回true,则不会收到任何单次、双击或第三次单击事件。发生这种情况是因为如果返回True,则表明信号不应沿着其父对象进一步传播,直到顶层小部件:如果您测试以上代码,您会发现按钮上的事件不会传播到EventBox。在
这是什么意思?在
好吧,一个单独的媒体的
button-press-event
似乎没有被传播。如果您尝试“双击”,它将传播计数为2,并且连续三次单击也将传播信号。在这似乎是一个错误,但需要更多的细节,例如,挖掘gtk源代码以找到原因。在
这是我从未见过的东西。然而,改变
到
^{pr2}$对单次点击有效(不管怎样对我来说)。在
相关问题 更多 >
编程相关推荐