Можно ли создавать новые сигналы в Python GTK +?Python GTK +: создавать собственные сигналы?
Я бы хотел использовать пример кода скелета.
Можно ли создавать новые сигналы в Python GTK +?Python GTK +: создавать собственные сигналы?
Я бы хотел использовать пример кода скелета.
Отрывок:
Создание собственных сигналов
Другая вещь, которую вы, вероятно, хотите использования при подклассов GObject это определить пользовательские сигналы. Вы можете создать свои собственные сигналы, которые могут быть испущены, так что пользователи вашего класса могут подключиться к .
При испускании сигнала будет выполнен набор замыканий . Закрытие - это абстракция обратного вызова . Закрытие - это обратный вызов сам (указатель функции), пользовательские данные (это будет последний параметр для обратного вызова) и еще одна функция для проблем очистки , которая не будет , обсуждаемой в этом документе.
Ради этой статьи вы не действительно нужно знать разницу между обратным вызовом и закрытием так будет использоваться оба термина. Но будьте сообщили, что это не совсем правильно.
Как мы уже говорили, когда выдается сигнал , набор замыканий будет выполнен . Один из них один и тот же для всех экземпляров этого класса и, следовательно, его название: закрытие класса, , а другие - пользовательские обратные вызовы. Обратите внимание, что не все сигналы должны иметь замыкание класса , поскольку оно является необязательным.
От, 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)
ответы правильны, конечно, но с использованием libraries менее склонны к боли:
import gobject
from pygtkhelpers.utils import gsignal
class Car(gobject.GObject):
gsignal('engine-started', float) # yeah baby
Спасибо за акцепт, он сломал мой 10k барьер, который держал весь вечер по какой-то странной причине. –
@ Эйден: мое удовольствие: извините, у меня нет остатков сегодня (квота дошла до конца). – jldupont
Не беспокойтесь, толкая меня на территорию «k», достаточно спасибо! –