Выдержка:
Создание собственных сигналов
Другая вещь, которую вы, вероятно, хотите
использовать при определении подкласса 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)