2017-04-13 121 views
-4

我有一個函數需要一個活動的開始時間和結束時間。我想要一個消息框彈出來告訴他們開始時間是否在結束時間之後開始(例如從18.00開始,但在15.00結束)。我決定用一個消息框告訴他們他們錯了,並將他們推回到函數的開頭。當按下時調用兩個變量的Tkinter按鈕?

我怎樣才能使按鈕,按下時,調用兩個命令。一個回到函數的開始,另一個破壞消息框?

def addtimeslot(): 
    hour1 = variable_st.get() 
    starttimehour = str(datetime.time(hour1,minute,second)) 
    hour2 = variable_end.get() 
    endtimehour = str(datetime.time(hour2,minute,second)) 
    if starttimehour >= endtimehour:      
     print("WRONG") 
     win = Toplevel() 
     win.title('invalid input') 
     message = "You have selected invalid input. Please try again" 
     Label(win, text = message).pack() 
     button = Button(win, text = 'ok', command = addtimeslot AND win.destroy).pack 

else: 
    continue code 

我知道'AND'不應該在那裏,它只是顯示我想要的。

btn_add_final = ttk.Button(window1, text = "Add timeslot",width = 15, command = addtimeslot) 
btn_add_final.place(x =300,y=275) 

更新爲顯示調用函數的按鈕。

+0

你可以用拉姆達破解它('命令=拉姆達:[addtimeslot(),win.destroy()')。不要這樣做! – CommonSense

+0

我猜你在後面忘了'()'。另外,如果'button = Button(...)。pack()它將是'None',因爲這是什麼包返回。在第二行做這個包。 – kabanus

+0

@kabanus在換行符上使用'pack()',但是在框架中的按鈕定位不在問題的範圍之內。 – pstatix

回答

1

使調用您的兩個函數的函數:

def fun1_and_fun2(): 
    fun1() 
    fun2() 

# Function holding your button 
# Stuff 
# .... 
button = Button(win, text = 'ok', command = fun1_and_fun2).pack 
+0

是否在我自己內部調用addtimeslot函數是否重要? – simons21

+0

@ simons21它應該沒關係。您的按鈕的功能位於'if'語句中,只要它沒有條件滿足,按鈕只會執行'if'之前的工作。然而,根據你的代碼,似乎'win'框架甚至不會在if語句滿足之前存在。所以我猜你從別的地方首先調用'addtimeslot()'? – pstatix

+0

是的。我在一個調用它的框架中有一個按鈕,但這是它在程序中調用的唯一時間。 – simons21