¿Es posible crear nuevas señales en Python GTK +?Python GTK +: ¿crea señales personalizadas?
Me gustaría un ejemplo de código de esqueleto, por favor.
¿Es posible crear nuevas señales en Python GTK +?Python GTK +: ¿crea señales personalizadas?
Me gustaría un ejemplo de código de esqueleto, por favor.
un extracto:
Creación de sus propias señales
La otra cosa es probable que desee su uso cuando la subclasificación GObject es definir señales personalizados. Puede crear sus propias señales que se pueden emitir para que los usuarios de su clase puedan conectarse a ellos.
Cuando se emite una señal, se ejecutará un conjunto de cierres. Un cierre es una abstracción del concepto de devolución de llamada . Un cierre es la devolución de llamada sí mismo (un puntero de función), los datos de usuario (será el último parámetro a la devolución de llamada) y otra función para temas de la limpieza, que no se describen en este documento.
Por el bien de este artículo no lo hace realmente necesita saber la diferencia entre una devolución de llamada y un cierre por lo se utilizan ambos términos. Pero sea aconsejó que esto no es totalmente correcto.
Como dijimos antes, cuando se emita una señal , se ejecutará un conjunto de cierres . Uno de ellos es el mismo para todas las instancias de esta clase y de ahí su nombre: el cierre de clase, y los otros son callbacks de usuario personalizado . Tenga en cuenta que no todas las señales deben tener un cierre de clase porque es opcional.
De, http://www.pygtk.org/articles/subclassing-gobject/sub-classing-gobject-in-python.htm, espero que ayude. No hay código de ejemplo en el sitio y here, un fragmento:
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)
Las respuestas son correctas, por supuesto, pero utilizando libraries es menos propenso a dolores:
import gobject
from pygtkhelpers.utils import gsignal
class Car(gobject.GObject):
gsignal('engine-started', float) # yeah baby
Gracias por la acepta, se me rompió 10k barrera que ha estado resistiendo toda la noche por alguna razón extraña. –
@Aiden: mi placer: lo siento, no me quedan votaciones para este día (la cuota se alcanzó antes). – jldupont
¡Sin preocupaciones, empujándome al territorio 'k' es gracias suficiente! –