PyGTK - Signalbehandlung
Im Gegensatz zu einer Anwendung im Konsolenmodus, die sequentiell ausgeführt wird, ist eine GUI-basierte Anwendung ereignisgesteuert. Dasgtk.main()Funktion startet eine Endlosschleife. Ereignisse, die auf der GUI auftreten, werden an entsprechende Rückruffunktionen übertragen.
Jedes PyGTK-Widget, das von der GObject-Klasse abgeleitet ist, ist für die Ausgabe ausgelegt ‘signal’als Reaktion auf ein oder mehrere Ereignisse. Das Signal alleine führt keine Aktion aus. Stattdessen ist es mit einer Rückruffunktion verbunden.
Einige Signale werden vom Widget geerbt, während einige Signale Widget-spezifisch sind. Beispielsweise wird das Signal "umgeschaltet" vom toggleButton-Widget ausgegeben.
Ein Signalhandler wird durch Aufrufen von eingerichtet connect() Methode der Klasse gtk.widget.
handler_id = object.connect(name, func, func_data)
Das erste Argument, nameist eine Zeichenfolge, die den Namen des Signals enthält, das Sie abfangen möchten.
Das zweite Argument, funcist die Rückruffunktion, die aufgerufen werden soll, wenn sie abgefangen wird.
Das dritte Argument, func_data, die Daten, die Sie an diese Funktion übergeben möchten.
Die Handler-ID, mit der die Rückrufmethode eindeutig identifiziert wird.
Verwenden Sie beispielsweise die folgende Syntax, um die Funktion onClicked () aufzurufen, wenn auf eine Schaltfläche geklickt wird:
btn.connect("clicked",onClicked,None)
Die Funktion onClicked () ist definiert als -
def onClicked(widget, data=None):
Wenn die Rückrufmethode eine Objektmethode ist, erhält sie sich selbst als zusätzliches Argument.
def onClicked(self, widget, data=None):
Beispiel
Im folgenden Beispiel wird gtk.Window eine Schaltfläche hinzugefügt. Die Meldung "Hallo Welt" wird gedruckt, wenn auf die Schaltfläche geklickt wird.
import gtk
class PyApp(gtk.Window):
def __init__(self):
super(PyApp, self).__init__()
self.set_title("Hello World in PyGTK")
self.set_default_size(400,300)
self.set_position(gtk.WIN_POS_CENTER)
self.label = gtk.Label("Enter name")
self.entry = gtk.Entry()
self.btn = gtk.Button("Say Hello")
self.btn.connect("clicked",self.hello)
fixed = gtk.Fixed()
fixed.put(self.label, 100,100)
fixed.put(self.entry, 100,125)
fixed.put(self.btn,100,150)
self.add(fixed)
self.show_all()
def hello(self,widget):
print "hello",self.entry.get_text()
PyApp()
gtk.main()
Führen Sie den obigen Code an der Python-Eingabeaufforderung aus. Die folgende Ausgabe wird angezeigt -
Wenn die Taste gedrückt wird, wird die folgende Ausgabe auf der Konsole angezeigt:
Hello TutorialsPoint