2014-06-27 22 views
0

我想要做一個tkinter小部件,將主動更新。請注意,倒計數()被稱爲第一! 我的問題是,一旦我輸入持續時間倒計時,它會關閉舊的小部件,因爲它應該(在這裏沒有看到)。但是,具有倒數計時器的新窗口小部件甚至不會顯示。如果我在IDE中停止,那麼小部件會彈出,當進程停止時剩下多少時間。使Tkinter倒數計時器更新積極

def update(start, finish): 
    timeRemaining = finish - start 
    timeDisplay = Label(text = "%s" % timeRemaining) 
    timeDisplay.pack(side = BOTTOM) 
    while True: 
     #check = timeRemaining.timetuple() 
     timeRemaining = str(finish - datetime.datetime.now()) 
     timeDisplay.config(text=timeRemaining) 
     timeDisplay.pack() 
     time.sleep(.01) 


def countdown(duration): 
    root.destroy() 
    title = Label(text = "Countdown") 
    title.pack() 
    duration = float(duration) 
    print(duration) 
    start = datetime.datetime.now() 
    startHours = int(duration/60) 
    startMinutes = int(duration % 60) 
    startSeconds = (((duration%60) - startMinutes)*60) 
    finish = start + datetime.timedelta(hours = startHours, minutes = startMinutes, seconds = startSeconds) 
    update(start, finish) 

我希望我給了足夠的信息。如果在這裏有什麼東西沒有上下文沒有意義,讓我知道。

任何想法? 謝謝。

+0

http://stackoverflow.com/questions/2400262/ python-gui-in-tkinter –

+0

實際上,我在查找幫助時已經看到了,但我認爲在每次迭代中帶有睡眠函數的while循環都可以工作。這是唯一的方式是這樣的嗎? – Seth

+0

是的...因爲你不允許任何時候在你的循環中更新你需要把控制權交還給主tk循環 –

回答

0

我修改這個How to create a timer using tkinter?做基本上你想要什麼

# for python 3.x use 'tkinter' rather than 'Tkinter' 
import Tkinter as tk 
import datetime 
import math 
MINUTE = 60 
HOUR = 60*MINUTE 
class App(): 
    def __init__(self): 
     self.root = tk.Tk() 
     self.done_time=datetime.datetime.now() + datetime.timedelta(seconds=HOUR/2) # half hour 
     self.label = tk.Label(text="") 
     self.label.pack() 
     self.update_clock() 
     self.root.mainloop() 

    def update_clock(self): 
     elapsed = self.done_time - datetime.datetime.now() 
     h,m,s,fractional_s = elapsed.seconds/3600,elapsed.seconds/60,elapsed.seconds%60 
     fractional_seconds = math.floor(elapsed.microseconds/1000000.0*100) 
     self.label.configure(text="%02d:%02d:%02d.%02d"%(h,m,s)) 
     self.root.after(1000, self.update_clock) 

app=App() 

(我把以防萬一你需要他們fractional_seconds ...)