如何使用字符串作为Python中的数据包发出gtk.gdk事件

时间:2012-08-09 23:18:18

标签: python gtk gdk emit

我遇到的问题是我需要根据从硬件线程收到的数据发出数据。理想情况下,我想用数据包发出信号。

我不知道该为什么填写????下方。

我是否需要制作自己的活动课程?

这样的事情:

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...

提前致谢!

编辑:最终实施(仅显示新功能/新增内容)......

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)

1 个答案:

答案 0 :(得分:1)

不要定义另一个gdk.Event。这些仅用于表示X11事件或其他平台上的等效事件。相反,您需要让您的类继承自gobject.GObject,然后使用魔术名称__gsignals__定义字典成员。

如何进行描述here

像这样:

class ApplicationFrame(gobject.GObject):
    __gsignals__ = {
        'data-received': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, (gobject.TYPE_PYOBJECT,))
    }

    def do_data_recieved(self, data):
        # default handler