Сигнал 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.

  • Как установить PyGI (Python Gobject Introspection) в Windows?
  • Как методы экспорта с dbus в расширенном классе в python, унаследованные методы?
  • Как перетаскивать изображения с помощью пигтка
  • Простой способ переключить полноэкранный режим с помощью F11 в PyGTK
  • Как отображать изображение из Интернета?
  • PyGTK: Как сделать изображение автоматически масштабируемым в соответствии с его родительским виджетами?
  • Каталоги каталогов Gettext из виртуального каталога в PYZ для виджетов GtkBuilder
  • Как сохранить ресурсы ресурса веб-страницы из памяти?
  •  
    Interesting Posts for Van-Lav

    Как воспроизвести аудиофайл через HTTP-ответ в django (python)

    Python Program, как подсчитывать количество раз, когда появляется буква c

    json.loads позволяет дублировать ключи в словаре, переписывая первое значение

    TensorFlow – вход «split_dim» в «Split» Op имеет тип float32, который не соответствует ожидаемому типу int32

    "Необязательная функция не реализована (106) (SQLBindParameter)" ошибка с pyodbc

    Обрабатывать список или одно целое в качестве аргумента

    pygame.image.load не работает

    как перенаправить полный вывод скрипта

    Недопустимый синтаксис с использованием определения dict

    изменить изображение на основе щелчка в pygame

    Измените количество тиков x-оси на морских участках

    Ошибка в django unittest при загрузке прибора

    django-admin бросает синтаксическую ошибку – проблема с конфигурацией Я думаю

    sqlalchemy flush () и получить вставленный идентификатор?

    Лучший способ поменять элементы в списке?

    Python - лучший язык программирования в мире.