Kurze Verständnisfrage zu Events...

Plattformunabhängige GUIs mit wxWidgets.
Antworten
mutetella
User
Beiträge: 1695
Registriert: Donnerstag 5. März 2009, 17:10
Kontaktdaten:

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
Entspanne dich und wisse, dass es Zeit für alles gibt. (YogiTea Teebeutel Weisheit ;-) )
Benutzeravatar
str1442
User
Beiträge: 520
Registriert: Samstag 31. Mai 2008, 21:13

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).
Silmaril
User
Beiträge: 55
Registriert: Sonntag 21. September 2008, 17:10
Wohnort: Franken

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
Lebe jeden Tag, als wäre es Absicht.
Benutzeravatar
HWK
User
Beiträge: 1295
Registriert: Mittwoch 7. Juni 2006, 20:44

Wie man in Deinem Link sieht, ist True die Standardeinstellung.
MfG
HWK
Silmaril
User
Beiträge: 55
Registriert: Sonntag 21. September 2008, 17:10
Wohnort: Franken

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.
Lebe jeden Tag, als wäre es Absicht.
Benutzeravatar
str1442
User
Beiträge: 520
Registriert: Samstag 31. Mai 2008, 21:13

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.
Antworten