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