gtk.ToolButton上Enter-Notify-Event信号无效
在一个开心的(虽然可能不太相关)话题上,这是我这个项目中最后一个障碍。如果我能解决这个问题,我就能发布我的第一个重要版本(1.0),而这个项目也将公开。感谢这里的每一个人,帮助我完成这个项目,还有我其他的两个项目(大家的回答都很有帮助,正如它们应该的那样)。
现在,回到实际的问题...
我在我的应用程序中有一个工具栏(使用Python 2.7和PyGTK),上面有几个gtk.ToolButton对象。这些按钮运行得很好,我已经为它们设置了“点击”事件。
不过,我还需要把它们连接到“enter-notify-event”和“leave-notify-event”信号,这样我就可以在状态栏中显示按钮的功能。
这是我写的代码。我没有收到任何错误,但状态栏的消息没有出现:
new_tb = gtk.ToolButton(gtk.STOCK_NEW)
toolbar.insert(new_tb, -1)
new_tb.show()
new_tb.connect("clicked", new_event)
new_tb.connect("enter-notify-event", status_push, "Create a new, empty project.")
new_tb.connect("leave-notify-event", status_pop)
我知道问题不在于“status_push”和“status_pop”事件,因为我已经把所有的gtk.MenuItem对象都连接到这些事件上,它们运行得很好。
我知道gtk.ToolButton对象属于Widgets类,所以“enter-notify-event”和“leave-notify-event”理论上应该可以工作。我唯一的猜测是,这个特定的对象除了“clicked”之外不发出其他信号,因此我可能需要把每个按钮放在一个gtk.EventBox里。
我在这里做错了什么?我该如何解决这个问题?
提前谢谢大家!
2 个回答
5
你的猜测是对的,你应该把你的组件放在一个叫做 gtk.EventBox
的东西里。下面有个例子,希望对你有帮助:
import gtk
def callback(widget, event, data):
print event, data
class Win(gtk.Window):
def __init__(self):
super(Win, self).__init__()
self.connect("destroy", gtk.main_quit)
self.set_position(gtk.WIN_POS_CENTER)
self.set_default_size(250, 200)
tb = gtk.ToolButton(gtk.STOCK_NEW)
# Wrap ``gtk.ToolButton`` in an ``gtk.EventBox``.
ev_box = gtk.EventBox()
ev_box.connect("enter-notify-event", callback, "enter")
ev_box.connect("leave-notify-event", callback, "leave")
ev_box.add(tb)
self.add(ev_box)
if __name__ == '__main__':
Win()
gtk.main()
2
根据实验和证据来看,这在PyGtk 2.24中是做不到的。