2017-04-13 8 views
-4

私は、アクティビティの開始時間と終了時間を取る関数を持っています。開始時刻が終了時刻の後に始まるかどうかを知らせるメッセージボックスがポップアップしたいと思います(たとえば、18.00から始まり15.00で終了)。私は、メッセージボックスが間違っていることを伝え、それらを機能の始めに戻すのに完璧であると判断しました。押されたときに2つの変数を呼び出すTkinterボタン?

ボタンを押すと、2つのコマンドが呼び出されます。 1つは機能の始めに戻り、もう1つはメッセージボックスを破壊しますか?

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

を。これをしないでください! – CommonSense

+0

私はあなたが '()'を最後の最後に忘れたと思っています。また、 'button = Button(...)。pack()なら' None'になります。これはパックが返すものですから。パックを2行目で行います。 – kabanus

+0

@kabanus改行時に 'pack()'と同時に、ボタンの位置はフレーム内で問題の範囲ではありません。 – pstatix

答えて

1

あなたの両方の機能を呼び出す関数ください:あなたが(:[addtimeslot()、win.destroy()] ``コマンド=ラムダ)ラムダでそれをハックすることができ

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

関連する問題