在一个快乐(如果不是不相关)的说明中,这是这个特定项目的绝对最后障碍。如果我解决这个问题,我的第一个重要的点发布(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中。
我在这里做错了什么?我该如何解决这个问题?
提前致谢!
答案 0 :(得分:3)
您的猜测是正确的,您应该将您的小部件包装在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()
答案 1 :(得分:2)
根据实验和证据,似乎在PyGtk 2.24中这是不可能的。