Python GTK +:创建自定义信号?

jld*_*ont 6 python gtk pygtk

是否有可能在Python GTK +中创建新信号?

我想要一个骨架代码示例.

Aid*_*ell 6

摘录:

创建自己的信号

在继承GObject时,您可能想要使用的另一件事是定义自定义信号.您可以创建自己的信号,以便您的班级用户可以连接到这些信号.

当发出信号时,将执行一组闭包.闭包是回调概念的抽象.闭包是回调本身(函数指针),用户数据(它将是回调的最后一个参数)和另一个清理问题的函数,本文档将不再讨论.

为了本文的目的,您不需要知道回调和闭包之间的区别,因此将使用这两个术语.但请注意,这不完全正确.

正如我们之前所说,当发出信号时,将执行一组闭包.其中一个对于此类的所有实例都是相同的,因此它的名称:类闭包,其他是自定义用户回调.请注意,并非所有信号都需要具有类闭包,因为它是可选的.

来自http://www.pygtk.org/articles/subclassing-gobject/sub-classing-gobject-in-python.htm,希望有所帮助.网站上有示例代码,这里有一个代码段:

import pygtk
pygtk.require('2.0')
import gobject

class Car(gobject.GObject):
    __gproperties__ = {
        'fuel' : (gobject.TYPE_FLOAT, 'fuel of the car',
                  'amount of fuel that remains in the tank',
                  0, 60, 50, gobject.PARAM_READWRITE)
        }

    __gsignals__ = {
        'engine-started' : (gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE,
                            (gobject.TYPE_FLOAT,))
        }

    def __init__(self):
        gobject.GObject.__init__(self)
        self.fuel = 50

    def do_get_property(self, property):
        if property.name == 'fuel':
            return self.fuel
        else:
            raise AttributeError, 'unknown property %s' % property.name

    def do_set_property(self, property, value):
        if property.name == 'fuel':
            self.fuel = value
        else:
            raise AttributeError, 'unknown property %s' % property.name

    def do_engine_started(self, remaining_fuel):
        print '***** Beginning of class closure *****'
        print 'The engine is ready and we still have %f of fuel' % self.fuel
        print '***** End of class closure *****'

    def start(self):
        self.emit('engine-started', self.get_property('fuel'))

gobject.type_register(Car)
Run Code Online (Sandbox Code Playgroud)