LINUX.ORG.RU

PyGTK эмуляция событий


0

0

Каким образом можно послать конкретному виджету определенный сигнал. Например, нажимается кнопка "s", а обработчик события создает событие KEY_PRESS с другим кодом клавиши и передает его определенному виджету (TreeView например). Пробрвал делать следующим образом в обработчике:

ev = gtk.gdk.Event(8)
ev.keyval = 32 #(нажатие пробела на кнопке)
self.button.event(ev)

последний метод возвращает True, т.е. якобы сообщение попадает в очередь, но ничего не происходит. Заполнение других полей (window, state, time и т.д.) ничего не дало.

★★★

а что должна делать кнопка при нажатии на ней пробела? я к тому, что если в аппликации пробел "кликает" по кнопе, то не пробел срабатывает, а кто-то "выше" интерпритирует пробел как некий action

могу ошибаться

Pi ★★★★★
()

К примеру, есть

entry — gtk.Entry
window — gtk.gdk.Window

Тогда делать так:

event = gtk.gdk.Event(gtk.gdk.KEY_PRESS)
event.keyval = ord('x')
event.window = window     # это обязательно
entry.grab_focus()        # это тоже обязательно, иначе key press будет вникуда
gtk.main_do_event(event)  # так рекомендовано в документации, просто entry.event(event) тоже работает

grob ★★★★★
()
Ответ на: комментарий от grob

Работает, но не совсем так, как надо. Если использовать gtk.main_do_event(event), то keypress перехватывается этим-же обработчиком события (события перехватываются главным окном). Если использовать метод event(), то событие не обрабатывается вообще (метод возвращает False)

h8 ★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.