Сигнал Enter-Notify-Event не работает с gtk.ToolButton

На счастливой (если не необоснованной) заметке это абсолютное последнее препятствие в этом конкретном проекте. Если я исправлю это, у меня будет первая значительная точка-релиз (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» СЛЕДУЕТ технически работать. Я только предполагаю, что этот конкретный объект не излучает никаких сигналов, кроме «щелкнув», и поэтому мне придется поместить их в gtk.EventBox.

Что я здесь делаю неправильно? Как это исправить?

Заранее спасибо!

2 Solutions collect form web for “Сигнал Enter-Notify-Event не работает с gtk.ToolButton”

Ваша догадка была правильной, вы должны обернуть ваш виджет в 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() 

По-видимому, на основе экспериментов и доказательств это невозможно в PyGtk 2.24.

  • urllib2 открыватель зависает, если он запускается внутри потока
  • Как помещать произвольные виджеты в gtk.Menu?
  • Как методы экспорта с dbus в расширенном классе в python, унаследованные методы?
  • Можно ли нарисовать GtkTreeView, как GtkIconView?
  • gtk idle_add не работает?
  • Пакет Python установлен глобально, но не в virtualenv (PyGTK)
  • gtk пользовательская кнопка отжима
  • Как сохранить ресурсы ресурса веб-страницы из памяти?
  • Как многократно показывать диалог с PyGTK / Gtkbuilder?
  • JSON кодирует / декодирует GTK перечисления
  • Некоторые вопросы о переключателях в python
  • Python - лучший язык программирования в мире.