У меня возникла проблема в том, что мне нужно испускать данные на основе данных, которые я получаю из аппаратного потока. В идеале я хотел бы передать сигнал с пакетом данных.Как передать событие gtk.gdk со строкой в виде пакета данных в Python
Я не знаю, что заполнить для ???? ниже.
Нужно ли мне создать собственный класс мероприятий?
Что-то вроде этого:
import gtk.gdk as gdk
import gtk.glade as glade
class ApplicationFrame(object):
def __init__(self, *args, **kwargs):
...
self.glade = glade.XML(ui_filepath)
self.window = self.glade.get_widget(self.widget_name)
# for keystrokes:
self.window.add_events(gtk.gdk.KEY_PRESS_MASK)
self.window.connect("key-press-event", self.default_handler)
# for my special event ????
self.window.add_events(gtk.gdk.????)
self.window.connect("????", self.default_handler)
...
def emit_signal(self, name, data):
event = gdk.Event(gdk.????)
event.name = name
event.data = data
self.window.emit(event)
def default_handler(self, widget, event):
name, data = self.extract_data_from(event)
# do something special with the information...
Заранее спасибо!
Edit: Final реализация (только показывая новые функции/дополнения) ...
class ApplicationFrame(Ui_ApplicationFrame):
"""Standard Application Frame for Application"""
__gsignals__ = {
'data-received': (gobject.SIGNAL_RUN_FIRST,
gobject.TYPE_NONE,
(gobject.TYPE_PYOBJECT,)),
}
...
def handle_new_data(self, data):
"""Callback routine when data arrives on bus"""
self.window.emit('data-received', data)
def do_data_received(self, data):
"""Callback routine for emitted 'data-received' signal"""
...
...
gobject.type_register(ApplicationFrame)
PS. Вот как это делается в PyGTK, который уже вышел. Рассмотрите перенос вашей программы на GTK 3 и PyGObject. – ptomato
Мне бы очень хотелось, но я в настоящее время застрял с Python 2.5 и более старой версией PyGTK. Спасибо вам за понимание, хотя! Я рассмотрю это прямо сейчас. –