Python进度条Variable class版

 1 from Tkinter import *
 2 import ttk
 3 import threading
 4 import random
 5 import time
 6 
 7 class PgBarFrm(Frame):
 8     def __init__(self, root, max_len):
 9         self.root = root
10         Frame.__init__(self, root)
11 
12         self.pb_val = IntVar()  # pbar variable
13         self.pb_max = max_len   # pbar maximum
14         
15         self.lb_str = StringVar()   # label string
16         self.update_label()
17         
18         self.pack(side=TOP, expand=1, fill=X)
19 
20         self.initUI()
21 
22     def initUI(self):
23         self.label = Label(self, textvariable=self.lb_str)
24         self.label.pack(side=LEFT)
25 
26         self.pbar = ttk.Progressbar(self, length=300, maximum=self.pb_max, variable=self.pb_val)
27         self.pbar.pack(side=LEFT, expand=1, fill=BOTH)
28 
29     def update_label(self):
30         self.lb_str.set('%d/%d' % (self.pb_val.get(), self.pb_max))
31 
32     def clear(self):
33         self.pb_val.set(0)
34         self.update_label()
35 
36     def step(self):
37         new_val = (self.pb_val.get()+1)
38         if new_val>self.pb_max:
39             self.clear()
40             self.step()
41         else:
42             self.pb_val.set(new_val)
43             self.update_label()
44 
45 
46 
47 class DualWork:
48     def __init__(self):
49         self.N1 = 5
50         self.N2 = 7
51         self.frm1 = PgBarFrm(root, self.N1)
52         self.frm2 = PgBarFrm(root, self.N2)
53 
54     def work(self):
55         for i in xrange(self.N1):            
56             for j in xrange(self.N2):
57                 rnd_t = random.uniform(0, 1)
58                 print threading.currentThread().getName(), i, j, rnd_t
59                 
60                 self.frm2.step()
61                 time.sleep(rnd_t)
62 
63             self.frm1.step()
64 
65     def start(self):
66         w_td = threading.Thread(target=self.work)
67         w_td.start()
68 
69 if __name__=='__main__':
70     root = Tk()
71     
72     w = DualWork()
73     w.start()
74 
75     root.mainloop()

 

posted @ 2013-04-24 17:14  n0p  阅读(589)  评论(0编辑  收藏  举报