wxPython und resize Verhalten
Morgen, Ich stricke gerade eine GUI für mein Jukebox Project auf wxPython und bin auf ein Merkwürdiges Verhalten gestoßen. Zwischen dem Server und dem Client läuft ein XML Protokoll ähnlich dem Jabber Protokoll. Wenn der Client sich für automatische Updates Registriert bekommt er bei Änderungen ein diese geschickt. Auf dem Client läuft ein Thread der ständig ließt, die Packete zerlegt und an die GUI schickt. Der Thread schickt nun jede Sekunde ein Objekt das einen Player repräsentiert an die Gui, diese aktualisiert Textfelder/Sliders,... Sobald ich aber einmal den Inhalt eines Feldes geändert hat, beginnt das Programm sich nichtmehr korrekt neuzuzeichnen. Ich habe schon mit Update() und Refresh() Methoden experimentiert. Besonders schlimm wird es wenn man die größe Ändert, dann existieren nur noch Schattierungen der Elemente. Müde Grüße Daniel -- nihil me cirumdat _______________________________________________ Python-de maillist - Python-de@python.net http://python.net/mailman/listinfo/python-de
daniel.poelzleithner wrote:
Sobald ich aber einmal den Inhalt eines Feldes geändert hat, beginnt das Programm sich nichtmehr korrekt neuzuzeichnen. Ich habe schon mit Update() und Refresh() Methoden experimentiert. Besonders schlimm wird es wenn man die größe Ändert, dann existieren nur noch Schattierungen der Elemente.
Manchmal ist es doch besser über das Problem zu schlafen ;-) Das Problem scheint zu sein, daß wxPython es nicht mag, daß in den GUI Thread geschrieben wird. Ich habe jetzt folgende Lösung gefunden. Class balbal def __init__... ... EVT_IDLE(self,self.onIdle) def rcvStatus(self, status): self.newstatus = status def onIdle(self, evt): for key, value in self.newstatus.items(): if self.oldstatus[key] != value: ... self.oldstatus = newstatus Der Empfänger Thread schreibt die Daten ins Objekt und der GUI Thread updatet während eines IDLE Zykluses. So einfach ;) Liebe Grüße Daniel _______________________________________________ Python-de maillist - Python-de@python.net http://python.net/mailman/listinfo/python-de
Daniel,
Das Problem scheint zu sein, daß wxPython es nicht mag, daß in den GUI Thread geschrieben wird.
Hat mich auch schon viel Zeit gekostet. wxPython = nur ein Thread darf das GUI nutzen. Alle Zeichenkommunikation mit diesem Thread am besten über Queues. Harald _______________________________________________ Python-de maillist - Python-de@python.net http://python.net/mailman/listinfo/python-de
Harald Armin Massa wrote:
Hat mich auch schon viel Zeit gekostet. wxPython = nur ein Thread darf das GUI nutzen. Alle Zeichenkommunikation mit diesem Thread am besten über Queues.
Mir ist grad aufgefallen daß die Lösung nur funktioniert solange IDLES gezeugt werden, waß z.b. ist, wenn man die Maus bewegt. Ich habs jetzt über ein eigenes wxEvent gelöst, daß dann beim Empfangen abgefeuert wird. Jaja, immer diese Dinge die man halt wissen sollte ;) Liebe Grüße Daniel _______________________________________________ Python-de maillist - Python-de@python.net http://python.net/mailman/listinfo/python-de
participants (2)
-
daniel.poelzleithner
-
Harald Armin Massa