> ------------ Původní zpráva ------------ > Od: Leos Pol <[EMAIL PROTECTED]> > Předmět: Re: [python] Vlastní vlákno pro dlouhý výpočet. > Datum: 02.3.2007 16:34:54
> Ja myslel, ze to pisete ve wxPythonu, tam se to da udelat velice hezky a > bez pouziti threadu. Nasledujici priklad je opis vaseho prikladu: > > class Trida: > > def __init__(self): > Button(text="zacni",command=self.ok) > Button(text="stpL",command=self.stop) > self.p = True > > def ok(self): > while self.p: > print 'sss' > wx.Yield() > > def stop(self): > self.p = False > > Priklad je jen nazorny zpusob, jak to jde udelat. Jinak tento priklad > jste mel v te referenci, kterou jste uvedl: > http://wiki.wxpython.org/index.cgi/LongRunningTasks > > Doporucuji take poradne nastudovat fci wx.Yield, protoze muze dochazet > treba k opetovnemu kliknuti na stejny button, takze se tam musi dodelat > disable apod. Mimo jine, vyuziti tohoto zpusobu dojde k i tomu, ze > nebude aplikace "zamrzavat" po dobu vypoctu, pokud tedy nebude trvat > jeden cyklus ve while dlouho. > > Leo > Děkuju, už sem to nějak udělal: # -*- coding: cp1250 -*- import wx def dlouha_funkce(cislo): while cislo != 50: if not vypocet:return "Přerušeno" cislo=cislo+1 print cislo wx.Yield() return "Výpočet dokončen" class Okno: def __init__(self): self.okno=wx.Frame(None) button=wx.Button(self.okno,label="Počítej") button.Bind(wx.EVT_BUTTON, self.pocitej) button2=wx.Button(self.okno,label="Stop",pos=(40,40)) button2.Bind(wx.EVT_BUTTON, self.stop) self.okno.Show(True) def pocitej(self,akce): global vypocet vypocet=True vysledek=dlouha_funkce(0) dlg = wx.MessageDialog(self.okno,vysledek, '', wx.OK | wx.ICON_INFORMATION) dlg.ShowModal() def stop(self,akce): global vypocet vypocet=False if __name__ == "__main__": vypocet=True p = wx.App(0) Okno() p.MainLoop() Dělal sem to hodně narychlo, takže se omlouvám za to hnusný global ve třídě;) Ještě jednou dík!! Blujacker _______________________________________________ Python mailing list [email protected] http://www.py.cz/mailman/listinfo/python
