Hallo,
ich benutze die Python IRCLib zusammen mit wxPython um unter Windows einen kleinen IRC-Client mit GUI zu programmieren - funktioniert auch soweit.
Nun ist es aber so, dass die IRC-Klasse eine Endlosschleife startet, um alle Nachrichten, die vom IRC-Server kommen auszuwerten.
Während dieser Endlosschleife bleibt aber meine Grafische Oberfläche mit wxPython stehen, so, als wäre das Programm abgestürzt, sie zeichnet sich nicht mehr neu und reagiert nicht auf Mausklicks. Beende ich die Schleife mit STRG+C, tut sie das wieder
Meine Frage - gibt es eine Anweisung in wxPython, die ich in dieser Schleife aufrufe, die das Programm 'weiterführt'? In Delphi gabs dafür Application.ProcessMessages, ich suche also so etwa das gleiche in Python. Oder gibts da einen ganz anderen Lösungsweg?
Danke schonmal,
Fred
IrcLib & wxPython: Endlosschleife
- gerold
- Python-Forum Veteran
- Beiträge: 5555
- Registriert: Samstag 28. Februar 2004, 22:04
- Wohnort: Oberhofen im Inntal (Tirol)
- Kontaktdaten:
Hallo Fred!fred.reichbier hat geschrieben:Während dieser Endlosschleife bleibt aber meine Grafische Oberfläche mit wxPython stehen, so, als wäre das Programm abgestürzt, sie zeichnet sich nicht mehr neu und reagiert nicht auf Mausklicks.
Du musst deine Endlosschleife in einen eigenen Thread verschieben. Ansonsten blockiert sie die GUI.
Schau dir mal diesen Thread an:
http://www.python-forum.de/post-48358.html#48358
Besonders den Bereich "Und so funktioniert es mit Thread".
Hier geht es auch um das gleiche Thema: http://www.python-forum.de/topic-8609.html
mfg
Gerold
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
-
- User
- Beiträge: 155
- Registriert: Freitag 29. Dezember 2006, 18:27
Hi,
Andy: Deins war nicht das was ich brauchte Trotzdem danke
gerold: Ich hab es jetzt so etwa hingekriegt, und zwar mit app.Yield():
Läuft aber sehr schleppend. Ich werde mir das mit den Threads mal ansehen, danke!
mfg fred
Andy: Deins war nicht das was ich brauchte Trotzdem danke
gerold: Ich hab es jetzt so etwa hingekriegt, und zwar mit app.Yield():
Code: Alles auswählen
def Process(self):
if len(self.servers) > 0:
self.servers[0].ircobj.process_once(0.2) ##todo:alle server##
self.app.Yield()
self.log.FlushActive()
wx.Sleep(0.2)
if self.process == True:
wx.CallAfter(self.Process)
mfg fred