我有一個函式可以創建一個新視窗并更新一些值以插入到新視窗中的一個 Entry 小部件中,作為時間表測驗的一部分。然后,我需要創建一個新函式,該函式在單擊提交按鈕時運行并檢查用戶的答案是否正確。但是,這個新函式在運行時給了我一個 NameError,因為它無法識別新視窗中的小部件,只能檢查原始視窗中的小部件。如何讓它在新視窗中檢查小部件?原始視窗:
Label(window,text="TIMES TABLES").pack()
game_btn = Button(window, text="Play Game",command=playGameClicked)
game_btn.pack()
創建新視窗的函式:
def playGameClicked():
#create new window
newWindow = Toplevel(window)
newWindow.geometry("500x300 0 0")
Label(newWindow, text = "Times Tables Game").pack()
Label(newWindow,text="Question:",font=("Helvetica",10),width=10,).pack()
question_box = Entry(newWindow,width=30,background="light blue")
question_box.pack()
Label(newWindow,text="Your Answer:",font=("Helvetica",10),width=10).pack()
answer_box = Entry(newWindow,width=50,background="light green")
answer_box.pack()
submit_btn = Button(newWindow,text="Submit",width=10,command=submitClicked)
submit_btn.pack()
Label(newWindow,text="You are...",font=("Helvetica",10),width=10).pack()
correction_box = Text(newWindow,width=15,height=1,background="light blue")
correction_box.pack()
#new question (all_tables_dict is a long dictionary of 1-12xtables e.g"1*2":2)
question_box.delete(0,END)
keys = list(all_tables_dict.keys())
new_question = random.choice(keys)
question_box.insert(END, new_question)
當提交按鈕被點擊時:(這是不起作用的功能)
def submitClicked():
answer_box.get(0.0,END)
try:
answer = all_tables_dict[question]
correct=True
except:
correct=False
if correct==True:
correction_box.insert("CORRECT!")
else:
correction_box.insert("INCORRECT!")
uj5u.com熱心網友回復:
您沒有顯示完整的錯誤訊息,我無法運行它,所以我猜
在函式內部創建的所有變數local都不能在其他函式中訪問。您必須通知函式它必須將小部件分配給全域變數。
def playGameClicked():
global answer_box
global correction_box
# ... code ...
answer_box = ...
# ... code ...
correction_box = ...
# ... code ...
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/331342.html
上一篇:用U2Net去除背景的力度太大
