是否可以在Python GTK +中创建新信号?
我想要一个骨架代码示例。
答案 0 :(得分:6)
摘录:
创建自己的信号
你可能想要的另一件事 在定义子类GObject时使用 自定义信号。你可以创建你的 自己发出的信号 您班级的用户可以连接到 它们。
当发出一组信号时 闭包将被执行。关闭 是回调的抽象 概念。闭包是回调 本身(一个函数指针),用户 数据(它将是最后一个参数 回调)和另一个函数 清理问题,这不会 在本文件中讨论过。
为了本文的缘故,你没有 真的需要知道差异 回调和闭包之间如此 这两个术语都将被使用。但是 建议这不完全 正确的。
正如我们之前所说,当信号是 发出一套封闭物 执行。其中一个是同一个 对于这个类的所有实例 因此它的名字:类封闭, 而其他的是自定义用户 回调。请注意,并非所有 信号需要有一个类闭包 因为它是可选的。
From,http://www.pygtk.org/articles/subclassing-gobject/sub-classing-gobject-in-python.htm,希望有所帮助。网站上有示例代码和here,代码段:
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)
答案 1 :(得分:3)
答案当然是正确的,但使用libraries不太容易出现问题:
import gobject
from pygtkhelpers.utils import gsignal
class Car(gobject.GObject):
gsignal('engine-started', float) # yeah baby