[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