È possibile creare nuovi segnali in Python GTK +?Python GTK +: crea segnali personalizzati?
Mi piacerebbe un esempio di codice scheletrico, per favore.
È possibile creare nuovi segnali in Python GTK +?Python GTK +: crea segnali personalizzati?
Mi piacerebbe un esempio di codice scheletrico, per favore.
Un estratto:
Creare i propri segnali
L'altra cosa che probabilmente si desidera utilizzare quando sottoclasse GObject è definire segnali personalizzati. È possibile creare i propri segnali che possono essere emessi in modo che gli utenti della classe possano connettersi a .
Quando viene emesso un segnale, verrà eseguita una serie di chiusure . Una chiusura è un'astrazione del concetto di callback . Una chiusura è la callback (un puntatore di funzione), i dati utente (sarà l'ultimo parametro a la richiamata) e un'altra funzione per i problemi di pulizia , che non sarà discussa in questo documento.
Per il bene di questo articolo non si davvero bisogno di conoscere la differenza tra un callback e una chiusura in modo saranno utilizzati entrambi i termini. Ma essere avvisato che questo non è completamente corretto .
Come abbiamo detto prima, quando un segnale è emesso, un set di chiusure sarà eseguito. Uno di questi è lo stesso per tutte le istanze di questa classe e quindi il suo nome: la chiusura di classe, e gli altri sono callback utente personalizzato . Si noti che non tutti i segnali devono avere una chiusura di classe perché è opzionale.
Da, http://www.pygtk.org/articles/subclassing-gobject/sub-classing-gobject-in-python.htm, sperare che sia d'aiuto. Non v'è esempio di codice sul sito e here, un frammento:
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)
Le risposte sono corrette, naturalmente, ma utilizzando libraries è meno soggetto a dolori:
import gobject
from pygtkhelpers.utils import gsignal
class Car(gobject.GObject):
gsignal('engine-started', float) # yeah baby
Grazie per la accetta, si è rotto il mio 10k barriera che è stata tenuta tutta la sera per qualche strana ragione. –
@Aiden: il mio piacere: scusate, non ho più avuto upvotes oggi (quota raggiunta in anticipo). – jldupont
Nessun problema, spingermi nel territorio "k" è abbastanza! –