Seite 1 von 1

Kurze Verständnisfrage zu Events...

Verfasst: Mittwoch 12. August 2009, 19:51
von mutetella
Hallo,

im Zuge meiner wxPython-Abenteuer lese ich gerade den Artikel 'self.Bind vs. self.button.Bind' auf wiki.wxpython.org. Mit Hilfe von leo.org und linguee.de bekam ich den Artikel trotz meiner bescheidenen Englischkenntnisse ganz gut in den Griff. Allerdings ist mir noch nicht so ganz klar, was damit gemeint ist, dass "some events propagate and some don't". 'to propagate' bedeutet für sich genommen 'sich ausbreiten', 'sich fortpflanzen' oder eben auch 'propagieren', das ich wiederum als 'bekannt machen' oder auch 'für etwas werben' verstehe.

Ich verstehe das bisher so, dass wx.CommandEvent-Bindings von wxPython/wxWidgets automatisch beachtet werden, weil command-events eben 'propagate', andere, wie z. B. wx.MouseEvent-Bindings nicht ohne weiteres beachtet werden, weil diese events eben nicht 'propagate'. Ja ok, das stimmt so nicht wirklich, aber mehr ist bei mir noch nicht angekommen... :?

Wenn mir das jemand verständlich machen könnte, das wäre total superklasse! Ich denke, dieses 'propagate' trägt entscheidend zu meinem Verstehen dieses Artikels bei. Desweiteren glaube ich, dass vom Verstehen dieses Artikels auch mein tieferes Verstehen von Events an sich abhängt.... :-)

Liebe Grüße
mutetella

Verfasst: Donnerstag 13. August 2009, 03:22
von str1442
Jedes Objekt wird in wx in eine Hierarchie zu seinen jeweiligens Parents eingeordnet. Wenn ein Objekt kreiert wird und den parent Parameter geliefert bekommt, ist es in der Hiarchie eben genau unter diesem Objekt. Wenn nun ein Event ausgelöst wird, wird zuerst das Objekt, in welchen das Event ausgelöst wird (ein Button zb), das entsprechende Event überreicht, sofern es dieses mittels self.Bind() gebunden hat. Ansonsten wird es in der Hiarchie zu seinem Elternobjekt weitergereicht. Ist es gebunden, wird die jeweilige Methode ausgeführt. Wenn diese Methode self.Skip() aufruft, wird das Element danach trotzdem weitergereicht, um noch eine Reaktion des Elternobjektes zu provozieren. Wenn es ein CommandEvent ist, wird es weitergereicht bis es die Spitze der Hierarchie erreicht. Ich glaube, in die Hierarchie fließt als letztes das App Objekt mitein.

Das ist die Propagation der Ereignisse. Sie propagieren zu dem Kopf der Hierarchie. Siehe auch: http://wiki.wxpython.org/EventPropagation (und das ganze "Programming in a Event driven Environment" Kapitel, im zweiten Unterkapitel wird darauf eingegangen)

(Mein Wissen über wx ist aber schon etwas angestaubt).

Verfasst: Montag 23. November 2009, 12:37
von Silmaril
Wenn diese Methode self.Skip() aufruft, wird das Element danach trotzdem weitergereicht, um noch eine Reaktion des Elternobjektes zu provozieren
Aber doch nur bei event.Skip(True) oder? Ich habe es so verstanden, dass bei False (Standardeinstellung) eben nicht mehr "gesucht" wird.

http://www.wxpython.org/docs/api/wx.Eve ... .html#Skip

Verfasst: Montag 23. November 2009, 12:47
von HWK
Wie man in Deinem Link sieht, ist True die Standardeinstellung.
MfG
HWK

Verfasst: Montag 23. November 2009, 13:53
von Silmaril
HWK hat geschrieben:Wie man in Deinem Link sieht, ist True die Standardeinstellung.
MfG
HWK
Ähm Mist. Meinte ich ja :oops:

Vertausche in meinen vorherigen Beitrag True mit False.

Verfasst: Montag 23. November 2009, 23:19
von str1442
Ja, wenn man False übergibt passiert garnichts. Wenn ich mal raten darf: Anscheinend eine Designentscheidung damit eigene Klassen möglichst nur die wx API verwenden müssen und man somit zb "self.Skip(important_skip_determining_bool_from_outer_space)" aufrufen kann und keine if-Abfrage benutzen muss.