Verständnissproblem bei Threads in wxpython
Verfasst: Sonntag 26. April 2009, 17:26
Hallo,
ich versuche eine GUI zu programieren bei der im Hintergrund rechenintensive Operationen ausgeführt werden. Aber obwohl ich diese in einem eigenem Thread starte reagiert die Oberfläsche erst wieder wenn die Operationen ausgeführt wurden.
In einem kleinen Testprogramm tritt das Problem auch schon auf:
Verhalten soll sich mein Programm wie die Funktion hinter dem Warten-Button, ein Thread wird gestarted, es wird z.b. auf Druck auf Sofort reagiert und es erscheint als Ausgabe btn2, hallo, rdy.
Mein Programm verhält sich aber wie die Funktion hinter dem Rechnen-Button. Bei Druck auf den Button und sofort danach auf den Sofort-Button erscheint nicht btn1,hallo,zahl wie ich es erwarten würde sondern btn1,zahl,hallo.
Wo liegt mien Fehler? Wieso warted die GUI auf die Berechnungen von der rechen-Funktion obwohl diese doch nebenbei in einem neuen Thread laufen soll?
Ich benutze Windows XP und Python 2.5
Mit Freundlichen Grüßen
copyy
ich versuche eine GUI zu programieren bei der im Hintergrund rechenintensive Operationen ausgeführt werden. Aber obwohl ich diese in einem eigenem Thread starte reagiert die Oberfläsche erst wieder wenn die Operationen ausgeführt wurden.
In einem kleinen Testprogramm tritt das Problem auch schon auf:
Code: Alles auswählen
# -*- coding: utf-8 -*-
import wx
import thread
import time
def rechnen(x):
print len(str(2**x))
def warten(x):
time.sleep(x)
print "rdy"
class Frame(wx.Frame):
def __init__(self,parent):
wx.Frame.__init__(self,parent)
sizer = wx.BoxSizer(wx.HORIZONTAL)
btn = wx.Button(self,label = "rechen")
btn.Bind(wx.EVT_BUTTON,self.onBtn1)
btn2 = wx.Button(self,label = "warten")
btn2.Bind(wx.EVT_BUTTON,self.onBtn2)
btn3 = wx.Button(self, label = "sofort")
btn3.Bind(wx.EVT_BUTTON,self.onBtn3)
sizer.Add(btn)
sizer.Add(btn2)
sizer.Add(btn3)
self.SetSizer(sizer)
def onBtn1(self,event):
thread.start_new(rechnen, (200000,))
print "btn1"
def onBtn2(self,event):
thread.start_new(warten, (5,))
print "btn2"
def onBtn3(self,event):
print "hallo"
def main():
app = wx.PySimpleApp(0)
frame = Frame(None)
frame.Show()
app.MainLoop()
if __name__ == "__main__":
main()
Mein Programm verhält sich aber wie die Funktion hinter dem Rechnen-Button. Bei Druck auf den Button und sofort danach auf den Sofort-Button erscheint nicht btn1,hallo,zahl wie ich es erwarten würde sondern btn1,zahl,hallo.
Wo liegt mien Fehler? Wieso warted die GUI auf die Berechnungen von der rechen-Funktion obwohl diese doch nebenbei in einem neuen Thread laufen soll?
Ich benutze Windows XP und Python 2.5
Mit Freundlichen Grüßen
copyy