Enter-Notify-Event信号不适用于gtk.ToolButton

Cod*_*e92 5 python gtk events signals pygtk

高兴的说(如果不是毫不含糊的话),这绝对是该特定项目中的最后障碍。如果解决此问题,我将拥有第一个重要的dot版本(1.0),该项目将公开发行。感谢SO上的每个人都帮助我完成了这个项目,还有其他两个我(答案应该对他们有帮助)。

现在,到实际的问题...

我的应用程序(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)
Run Code Online (Sandbox Code Playgroud)

我知道问题不在于“ status_push”和“ status_pop”事件,因为我已经将所有gtk.MenuItem对象连接到了它们,并且它们畅快地工作。

我知道gtk.ToolButton对象在Widgets类中,因此“ enter-notify-event”和“ leave-notify-event”在技术上应该有效。我唯一的猜测是该特定对象除了“单击”之外不会发出任何其他信号,因此我不得不将每个信号都放在gtk.EventBox中。

我在这里做错了什么?我该如何解决?

提前致谢!

mou*_*uad 5

您的猜测是正确的,您应该将您的小部件包装在 a 中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()
Run Code Online (Sandbox Code Playgroud)


Cod*_*e92 2

根据实验和证据,这在 PyGtk 2.24 中是不可能的。