Wofür Events?

Programmierung für GNOME und GTK+, GUI-Erstellung mit Glade.
Antworten
nbkr
User
Beiträge: 28
Registriert: Montag 30. Mai 2005, 11:32

Donnerstag 27. April 2006, 14:13

Hallo,

ich versuche mich (mal wieder) in Sachen Oberflächenprogrammierung und arbeite mich gerade durch die verschiedenen Howtos durch. Was ich nicht verstehe ist die Abgrenzung zwischen Events und Signalen.

Um eine Aktion ausführunge sobald ich auf einen Button clicke kann ich den "button_press_event" abfangen oder das "clicked" Signal. Welches nimmt man den nun und warum? Wofür sind Events gut wenn es Signale gibt, usw?

Kann mir jemand Klarheit bringen? Danke!

Gruß
nbkr
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Donnerstag 27. April 2006, 19:12

Ich bin auch nicht so das PyGTK-Universalgenie, aber es sieht glaube ich so aus:
Du bindest ein Callback an ein Widget, welcher aufgerufen wird, sobald das Signal eintrifft. Im Callback dagegen , bekommst du von PyGTK automatisch in der variable, die die meisten Leute event nennen, das Event, welches passiert ist. Das ist dafür gut, dass du ein Callback für verschiedene Signale gleichzeitig verwenden kannst und im Callback die verschiedenen Events unterscheiden kannst.

"und wie immer, ohne Gewähr"
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Donnerstag 27. April 2006, 20:00

nbkr hat geschrieben:Um eine Aktion ausführunge sobald ich auf einen Button clicke kann ich den "button_press_event" abfangen oder das "clicked" Signal. Welches nimmt man den nun und warum?Danke!
Hi nbkr!

Warum es Events UND Signale gibt, das weiß ich auch nicht. Ich kann dazu also nur eine Vermutung abliefern.

Meine Vermutung:
Events kommen vom Betriebssystem oder vom X-Server und sind einfach die allgemeinen Events, die so an grafische Widgets übermittelt werden. Signale sind auf einer höheren Ebene und müssen nicht unbedingt ein reales Ereignis als Hintergrund haben. Das geht sogar so weit, dass manche Signale erst dann ausgelöst werden, wenn mehrere Events in der richtigen Reihenfolge ausgelöst wurden. Glaube ich -- so in etwa... :?

Und jetzt zur Frage, was du verwenden sollst:
Verwende "clicked". Das ist genau dafür geschaffen.
"clicked" wird dann ausgelöst, wenn der Button den Fokus hat und zum Beispiel mit der Leertaste gedrückt wurde. "clicked" wird aber auch dann ausgelöst, wenn man mit der Maus, mit der linken Maustaste auf den Button klickt und die Maustaste wieder los lässt, so lange der Mauszeiger noch über dem Button ist. Das ist das normale Verhalten. Wenn du zwar mit der linken Maustaste über dem Button klickst, dann den Mauszeiger vom Button wegnimmst und dann erst den Button auslässt, dann wird "clicked" *nicht* ausgelöst. Das ist auch unter Windows das Standardverhalten. So kann sich der Benutzer immer noch anders entscheiden und diese Freiheit sollte man ihm auch lassen.

Signale und Events unterscheiden sich in der Verwendung nur an der unterschielichen Anzahl an Argumenten, die an den Eventhandler übergeben werden.

mfg
Gerold
:-)
Zuletzt geändert von gerold am Donnerstag 27. April 2006, 20:05, insgesamt 1-mal geändert.
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
mitsuhiko
User
Beiträge: 1790
Registriert: Donnerstag 28. Oktober 2004, 16:33
Wohnort: Graz, Steiermark - Österreich
Kontaktdaten:

Donnerstag 27. April 2006, 20:04

signals -> vom x server
events -> vom glib event system (früher mal war das teil von gtk)
TUFKAB – the user formerly known as blackbird
nbkr
User
Beiträge: 28
Registriert: Montag 30. Mai 2005, 11:32

Donnerstag 27. April 2006, 21:04

Danke an alle! Wieder ein Puzzlestück mehr auf dem Weg zum Gesamtbild. ;)
Antworten