2016-06-25 111 views
0

我想用tkinter構建一個倒數計時器。我想將條目中的值傳遞給倒計數(count)函數。這裏是我的嘗試:Tkinter鬧鐘

def countdown(count): 
    label['text'] = count 

    if count > 0: 
     top.after(1000, countdown,count-1) 

top = tkinter.Tk() 
top.geometry("700x100") 
hoursT=tkinter.Label(top, text="Hours:") 
hoursE=tkinter.Entry(top) 
minuteT=tkinter.Label(top, text="Minutes:") 
minuteE=tkinter.Entry(top) 
secondT=tkinter.Label(top, text="Seconds:") 
secondE=tkinter.Entry(top) 
hoursT.grid(row=1,column=1) 
hoursE.grid(row=1,column=2) 
minuteT.grid(row=1,column=3) 
minuteE.grid(row=1,column=4) 
secondT.grid(row=1,column=5) 
secondE.grid(row=1,column=6) 
label = tkinter.Label(top) 
label.grid(row=3) 

t=(int(hoursE.get())*360+int(minuteT.get())*60+int(secondE.get()) 
button=tkinter.Button(top,text="Start Timer",command=lambda  count=t:countdown(count)) 
button.grid(row=2) 

不過,我得到這個錯誤:

Traceback (most recent call last): 
File "C:\Users\charley.ACER-PC\AppData\Local\Programs\Python\Python35- 32\tkinterTutorial.py", line 30, in <module> 
t=(int(hoursE.get())*360+int(minuteT.get())*60+int(secondE.get())) 
ValueError: invalid literal for int() with base 10: '' 

我怎樣才能運行此代碼:

t=(int(hoursE.get())*360+int(minuteT.get())*60+int(secondE.get()) 

只有當條目填充有整數?

謝謝:)

回答

0

一種解決方案是在第一位置的按鈕那裏,change the command在運行時間event listeners

button=tkinter.Button(top,text="Start Timer",command=lambda:None) 
button.grid(row=2) 

def updateButton(): 
    hour,min,sec=hoursE.get(),minuteT.get(),secondE.get() 
    if hour.isdigit() and min.isdigit() and sec.isdigit(): 
     time=int(hour)*360+int(min)*60+int(sec) 
     button.configure(command=lambda count=time:countdown(count)) 

for widget in (hoursE,minuteT,secondE): 
    widget.bind("<FocusOut>", updateButton)