[python] Vlastní vlákno pro dlouhý výpočet - Tkinter
RMiklos na pss.sk
RMiklos na pss.sk
Úterý Březen 6 08:39:28 CET 2007
V Tkinteri by to bolo s pouzitim vlakien takto:
----------------------------------------------------------------------------------
# -*- coding: cp1250 -*-
from Tkinter import *
import thread
# globals
root = Tk()
computation = False
thread_flag = True
def compute():
global computation
j=0
while computation:
j += 1
print "%5d. step of computation" % j
def run():
global computation,thread_flag
computation=True
#print "computation = %s" % computation
#print "thread_flag = %s" % thread_flag
if thread_flag:
thread.start_new_thread(compute, ())
thread_flag = False
def stop():
global computation,thread_flag
#print "computation = %s" % computation
#print "thread_flag = %s" % thread_flag
if computation:
computation = False
thread_flag = True
#print "Stop!"
'''main section'''
# create a toolbar
toolbar = Frame(root)
b = Button(toolbar, text="run", width=6, command=run)
b.pack(side=LEFT, padx=2, pady=2)
b = Button(toolbar, text="stop", width=6, command=stop)
b.pack(side=LEFT, padx=2, pady=2)
toolbar.pack(side=TOP, fill=X)
# mainloop
mainloop()
----------------------------------------------------------------------------------
alebo lepsie bez pouzitia glob premennych
----------------------------------------------------------------------------------
# -*- coding: cp1250 -*-
from Tkinter import *
import thread
class MyApp:
def __init__(self):
self.root = Tk()
self.computation = False
self.thread_flag = True
def compute(self):
j=0
while self.computation:
j += 1
print "%5d. step of computation" % j
def run(self):
self.computation=True
#print "computation = %s" % computation
#print "thread_flag = %s" % thread_flag
if self.thread_flag:
thread.start_new_thread(self.compute, ())
self.thread_flag = False
def stop(self):
#print "computation = %s" % computation
#print "thread_flag = %s" % thread_flag
if self.computation:
self.computation = False
self.thread_flag = True
#print "Stop!"
def main(self):
'''main function'''
# create a toolbar
toolbar = Frame(self.root)
b = Button(toolbar, text="run", width=6, command=self.run)
b.pack(side=LEFT, padx=2, pady=2)
b = Button(toolbar, text="stop", width=6, command=self.stop)
b.pack(side=LEFT, padx=2, pady=2)
toolbar.pack(side=TOP, fill=X)
# mainloop
self.root.mainloop()
if __name__ == "__main__":
# Run program
myapp = MyApp()
myapp.main()
----------------------------------------------------------------------------------
"Jakub Vojacek" <jakohv na seznam.cz>
Sent by: python-bounces na py.cz
01.03.2007 21:54
Please respond to
Konference PyCZ <python na py.cz>
To
"Konference PyCZ" <python na py.cz>
cc
Subject
[python] Vlastní vlákno pro dlouhý výpočet.
Ahoj
CHtěl radu ohledně vláken. Dělám na programu, kde chci dát uživateli
možnost přeuršit výpočet, protože občas by to trvá fakt dlouho. Ale jak to
naprogramovat. Hledal jsem inspiraci v
http://wiki.wxpython.org/index.cgi/LongRunningTasks ale nepomohlo to.
Potřeboval bych aby to vlákno přijalo funkci, kterou musí počítat a když
by se to dopočítalo tak aby vrátila data
Vlastně by to fungovalo tímto způsobem:
vysledek=Vlakno(moje_funkce_s_parametry)
if vysledek != None:#uživatel přeušil výpočet
zpracuj_vysledek()
Děkuji za všechny nápady
Blujacker_______________________________________________
Python mailing list
Python na py.cz
http://www.py.cz/mailman/listinfo/python
Mgr. Ing. Roman MIKLÓŠ
Prvá stavebná sporiteľňa a.s.
Bajkalská 30, P. O. Box 48
829 48 Bratislava 25
Tel.: +421/ 2 / 582 31 174
Fax: +421/ 2 / 582 31 109
Další informace o konferenci Python