Действительно ли возможно создать новые сигналы в Python GTK +?
Я хотел бы скелетный пример кода.
Выдержка:
Создание собственных сигналов
Другое, что вы, вероятно, хотите Используйте, когда подклассный Gobject определяется Пользовательские сигналы. Вы можете создать свой собственные сигналы, которые могут быть изданы так Пользователи вашего класса могут подключиться к их.
Когда сигнал излучается набор замыкание будет выполнено. Закрытие это абстракция обратного вызова концепция. Закрытие - обратный вызов сам (указатель функции), пользователь данные (это будет последний параметр для обратный вызов) и другая функция для проблемы очистки, которые не будут обсуждается в этом документе.
Ради этой статьи вы не действительно нужно знать разницу между обратным вызовом и закрытием так оба термины будут использоваться. Но быть посоветовал, что это не совсем правильный.
Как мы уже говорили, когда сигнал излучается, набор закрытий будет выполнено. Один из них такой же один Для всех случаев этого класса И, следовательно, его название: класс закрытия, а другие являются пользовательским пользователем обратные вызовы. Обратите внимание, что не все сигналы должны иметь класс закрытия Потому что это необязательно.
из, http://www.pygtk.org/articles/subclassing-gobject/sub-classing-gobject-in-wython.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)
Ответы верны конечно, но с использованием библиотек менее склонны к болям:
import gobject
from pygtkhelpers.utils import gsignal
class Car(gobject.GObject):
gsignal('engine-started', float) # yeah baby