Ist es möglich, neue Signale in Python GTK + zu erstellen?Python GTK +: benutzerdefinierte Signale erstellen?
Ich möchte bitte ein Skelett Code Beispiel.
Ist es möglich, neue Signale in Python GTK + zu erstellen?Python GTK +: benutzerdefinierte Signale erstellen?
Ich möchte bitte ein Skelett Code Beispiel.
Ein Auszug:
Erstellen Ihrer eigenen Signale
Die andere Sache, die Sie wahrscheinlich zu verwenden möchten, wenn Subklassen GObject benutzerdefinierte Signale definieren ist. Sie können Ihre eigenen Signale erstellen, die ausgegeben werden können, so dass sich Benutzer Ihrer Klasse mit verbinden können.
Wenn ein Signal ausgegeben wird, wird eine Reihe von Schließungen ausgeführt. Eine Schließung ist eine Abstraktion des Rückrufs Konzept. Eine Schließung ist der Rückruf selbst (ein Funktionszeiger), der Benutzer Daten (es wird der letzte Parameter zu der Rückruf sein) und eine andere Funktion für Bereinigungsprobleme, die nicht in diesem Dokument diskutiert werden.
Im Interesse dieses Artikels Sie nicht wirklich den Unterschied zwischen einem Rückruf wissen müssen, und einem Verschluss so beiden Begriffe verwendet. Aber sei empfohlen, dass dies nicht vollständig korrekt ist.
Wie bereits gesagt, wenn ein Signal ausgegeben wird, wird eine Reihe von Schließungen ausgeführt. Einer von ihnen ist der gleiche für alle Instanzen dieser Klasse und daher der Name: die Klasse Schließung, und die anderen sind benutzerdefinierte Benutzer Rückrufe. Beachten Sie, dass nicht alle Signale eine Klassenschließung haben müssen, weil es optional ist.
Von, http://www.pygtk.org/articles/subclassing-gobject/sub-classing-gobject-in-python.htm, hoffe das hilft. Es gibt Beispielcode auf der Website und here, ein Ausschnitt:
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)
Die Antworten sind richtig natürlich, aber libraries mit weniger anfällig für Schmerzen:
import gobject
from pygtkhelpers.utils import gsignal
class Car(gobject.GObject):
gsignal('engine-started', float) # yeah baby
Vielen Dank für das akzeptieren, brach es meine 10k Barriere, die den ganzen Abend aus irgendeinem seltsamen Grund gehalten hat. –
@Aiden: mein Vergnügen: Entschuldigung, ich habe heute keine Upvotes mehr (Quote früh erreicht). – jldupont
Keine Sorge, drängt mich in 'k' Gebiet ist genug danke! –