摘录:
创建自己的信号
在继承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)