Seite 1 von 1

Wofür Events?

Verfasst: Donnerstag 27. April 2006, 14:13
von nbkr
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

Verfasst: Donnerstag 27. April 2006, 19:12
von Leonidas
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"

Re: Wofür Events?

Verfasst: Donnerstag 27. April 2006, 20:00
von gerold
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
:-)

Verfasst: Donnerstag 27. April 2006, 20:04
von mitsuhiko
signals -> vom x server
events -> vom glib event system (früher mal war das teil von gtk)

Verfasst: Donnerstag 27. April 2006, 21:04
von nbkr
Danke an alle! Wieder ein Puzzlestück mehr auf dem Weg zum Gesamtbild. ;)