Enter-Notify-Event信号无法在gtk.ToolButton上运行

时间:2011-09-08 17:13:45

标签: python events gtk pygtk signals

在一个快乐(如果不是不相关)的说明中,这是这个特定项目的绝对最后障碍。如果我解决这个问题,我的第一个重要的点发布(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 个答案:

答案 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中这是不可能的。