我正在嘗試使用 Tkinter 創建一個簡單的計算器,但我遇到了一個問題。先看相關代碼:
entry_text = StringVar()
inout = Entry(root, textvariable=entry_text)
inout.grid(row=0, column=0, columnspan=4, sticky="nsew")
def equals():
print("Equal button is clicked")
get_answer = True
def divide():
tempvar = entry_text.get()
num1 = int(tempvar)
entry_text.set("")
while get_answer == False:
tempvar2 = entry_text.get()
try:
num2 = int(tempvar2)
except ValueError:
num2 = 0
print("I'm out of the loop.")
answer = num1 / num2
entry_text.set(answer)
在這里,我正在為divide按鈕創建一個函式。按鈕的功能是每當您單擊按鈕時,它都會獲取entry_text變數的瞬時值,將其存盤在臨時變數中并重置變數的值entry_text。然后它運行一個回圈來收集下一個值,entry_text直到單擊等于按鈕。但問題就在這里。每當我單擊divide按鈕時,GUI 就會變得無回應,并且我無法輸入除法運算的下一個值并退出回圈。
任何人都可以幫忙嗎?
uj5u.com熱心網友回復:
避免在 tkinter 應用程式中使用 while 回圈,因為它會阻止 tkintermainloop處理掛起的事件。
此外,get_answerinsideequals()是一個區域變數,因為您尚未使用 將其宣告為全域變數global get_answer。
其實你應該在里面執行所需的操作equals(),但你需要將第一個數字和選定的操作存盤為全域變數:
num1 = 0
operator = None
def equals():
global num1, operator
print("Equal button is clicked")
try:
tempvar = entry_text.get()
num2 = float(tempvar) # used float() instead of int()
if operator == '/' and num2 != 0:
answer = num1 / num2
entry_text.set(answer)
operator = None # reset operator
except ValueError:
print('Invalid value', tempvar)
def divide():
global num1, operator
try:
tempvar = entry_text.get()
num1 = float(tempvar) # used float() instead of int()
entry_text.set("")
operator = '/' # save the operator
except ValueError:
print('Invalid value', tempvar)
uj5u.com熱心網友回復:
程式變得無回應,因為while回圈永遠持續下去并且永遠不會中斷,因為變數get_answer永遠不會更改為True。
你不能點擊任何按鈕,因為
while回圈一直在運行并且不能在沒有給定條件的情況下中斷,false或者break在一定數量的回圈后被手動告知。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/356572.html
