PyGTK - Gestion du signal
Contrairement à une application en mode console, qui est exécutée de manière séquentielle, une application basée sur l'interface graphique est pilotée par les événements. legtk.main()La fonction démarre une boucle infinie. Les événements survenant sur l'interface graphique sont transférés aux fonctions de rappel appropriées.
Chaque widget PyGTK, qui est dérivé de la classe GObject, est conçu pour émettre ‘signal’en réponse à un ou plusieurs événements. Le signal seul n'effectue aucune action. Au lieu de cela, il est «connecté» à une fonction de rappel.
Certains signaux sont hérités du widget, tandis que certains signaux sont spécifiques au widget. Par exemple, le signal "toggled" est émis par le widget toggleButton.
Un gestionnaire de signaux est mis en place en invoquant le connect() méthode de la classe gtk.widget.
handler_id = object.connect(name, func, func_data)
Le premier argument, name, est une chaîne contenant le nom du signal que vous souhaitez capturer.
Le deuxième argument, func, est la fonction de rappel que vous souhaitez appeler lorsqu'elle est interceptée.
Le troisième argument, func_data, les données que vous souhaitez transmettre à cette fonction.
L'ID du gestionnaire, utilisé pour identifier de manière unique la méthode de rappel.
Par exemple, pour appeler la fonction onClicked () lorsqu'un bouton est cliqué, utilisez la syntaxe suivante -
btn.connect("clicked",onClicked,None)
La fonction onClicked () est définie comme -
def onClicked(widget, data=None):
Si la méthode de rappel est une méthode objet, elle reçoit self comme argument supplémentaire -
def onClicked(self, widget, data=None):
Exemple
Dans l'exemple suivant, un Button est ajouté à gtk.Window. Le message «Hello World» est imprimé lorsque le bouton est cliqué.
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()
Exécutez le code ci-dessus à partir de l'invite Python. La sortie suivante sera affichée -
Lorsque le bouton est enfoncé, la sortie suivante s'affiche sur la console -
Hello TutorialsPoint