Seite 1 von 1

wx-Event in einer nicht von wx-erbenden Klasse auslösen

Verfasst: Donnerstag 26. Februar 2009, 23:53
von Blauer Fasan
Guten Tag!

Ich möchte innerhalb eines Threads (nicht von wx erbende Klasse), der bei einem Server, implementiert durch socket, auf eingehende Verbindung wartet, eben beim Eintreten dieses Falles ein Event auslösen, welches in der Benutzeroberfläche (eine von wx erbende Klasse) abgehandelt wird.

Also das Event soll vom Thread ausgelöst und an eine Methode in der Benutzeroberfläche gebunden werden.

Als Lösung habe ich hier im Forum bereits dieses hier gefunden:

http://www.python-forum.de/topic-6165.h ... ausl%F6sen

Ich meine die Antwort Gerolds. Dort wird so...

Code: Alles auswählen

event = BeimKlickenEvent(myEVT_BEIM_KLICKEN, self.GetId())
event.mein_parameter = 10
self.GetEventHandler().ProcessEvent(event)
das Event initialisiert und ausgelöst. Da dieses allerdings mit der Funktion self.GetId() sowie der Funktion self.GetEventHandler() zusammenhängt, ist das Auslösen in meinem Falle nicht möglich, da die hier verwendete Klasse (der Thread) nicht von wx erbt und somit beide Funktionen nicht beherrscht.

Mich würde es wirklich sehr freuen, wenn ihr mir helfen könntet.

Danke für alle Bemühungen

Blauer

Re: wx-Event in einer nicht von wx-erbenden Klasse auslösen

Verfasst: Freitag 27. Februar 2009, 09:46
von gerold
Blauer Fasan hat geschrieben:Als Lösung habe ich hier im Forum bereits dieses hier gefunden:
http://www.python-forum.de/topic-6165.h ... ausl%F6sen
Hallo Blauer Fasan!

Das mit dem Erstellen von wx-Events funktioniert inzwischen mit ``wx.lib.newevent`` etwas einfacher.

Für dein Problem würde ich aber nicht mit einem wx-Event arbeiten. Besser gefallen würde mir die Übergabe einer Funktion oder Methode, die vom arbeitenden Thread aufgerufen wird, wenn sich etwas tut. Sozusagen, eine "Callback-Funktion".

Du musst dich nur darum kümmern, dass der arbeitende Thread **nicht** direkt Anweisungen an den GUI-Thread schickt. Das funktioniert mit ``wx.CallAfter()``.

- http://www.python-forum.de/topic-14626.html
- http://www.python-forum.de/topic-14624.html
- http://www.python-forum.de/topic-12193.html
- http://www.python-forum.de/topic-10704.html

mfg
Gerold
:-)

Verfasst: Freitag 27. Februar 2009, 16:45
von Blauer Fasan
Also ersteinmal danke für die schnelle Antwort!

Ich berufe mich im Folgendem auf diesen Lösungsvorschlag:

http://www.python-forum.de/topic-10704.html

Dort sind die Thread- sowie GUI-Applikation bzw. die Applikation, welche das Event abfängt alle in einer Datei. Dies ist ja normal nicht der Fall, genauso wie bei mir.

Nun wird bei mir mit deiner Lösung die an das Event gebundene Methode nicht aufgerufen und so dachte ich mir, dass dies eben an der Aufteilung der Klassen in mehrere Dateien liegt. So habe ich dann dein Beispiel genommen und dort auch Thread- von den anderen beiden getrennt.
Und siehe da, es funktioniert auch nicht.

Hat das vielleicht etwas mit der Erstellung der Event-Klasse und Eventbinder-Funktionen zu tun?

Code: Alles auswählen

# Event-Klasse und Eventbinder-Funktionen erstellen
(NewStatusEvent, EVT_NEW_STATUS) = wx.lib.newevent.NewEvent()
Denn dieses Erzeugen wird ja nun in beiden Dateien vollzogen und somit unterscheiden sich doch dann die Instanzen der Event-Klasse und der Eventbinder-Funktion, richtig?

Ist dies das Problem? Und wenn ja, was sollte man dagegen tun?

Schonmal wieder vielen Dank für das Auseinandersetzen mit meinem Problem! :)

Verfasst: Freitag 27. Februar 2009, 19:48
von Blauer Fasan
Also wenn jemand außer gerold noch eine Idee hat, kann er diese bitte gerne äußern, denn wir (ich und mein Programmierpartner hier^^) haben bis morgen noch Zeit, unser Projekt fertigzustellen.

Also mal ganz freundlich *drängel* :P

Danke :)