Tkinter测验程序中Answer变量无法二次更新的问题
Tkinter测验程序Answer变量不更新问题解决
你的问题出在changeWord()函数的变量作用域上:函数内部重新定义的word和answer是局部变量,完全独立于外层quizMain()里的同名变量,所以外层getAnswer()判断时用的始终是第一次初始化的旧答案。
修改方案:
在changeWord()函数开头添加nonlocal声明,让函数内部的变量引用外层函数的变量,而非创建新的局部变量。另外可以顺便清空输入框,优化交互体验。
修改后的完整代码:
from tkinter import * from tkinter import ttk from ctypes import windll import random windll.shcore.SetProcessDpiAwareness(1) words = { "triste": "sad", "mahalang": "sick", "chocho": "eat" , "kada dia": "everyday" , "eskuela": "school" , "asagua": "wife", "nobia": "girlfriend" , "nobiu": "boyfriend" , "bintåna": "window" } def quizMain(): root = Tk() root.title("Chamorro Quiz") root.minsize(300, 150) word = random.choice(list(words.keys())) answer = words[word] print(word) print(answer) wordQuestion = ttk.Label(root, text=word) wordQuestion.grid() wordEntry = StringVar() wordAnswer = ttk.Entry(root, textvariable=wordEntry) wordAnswer.grid() def getAnswer(): userAnswer = wordAnswer.get() if userAnswer == answer: changeWord() wordEntry.set("") # 清空输入框 def changeWord(): nonlocal word, answer # 声明引用外层函数的变量 word = random.choice(list(words.keys())) answer = words[word] print(word, answer) wordQuestion.configure(text=word) submit = ttk.Button(root, text="Submit", command=getAnswer) submit.grid() root.mainloop() quizMain()
关键修改说明:
- 在
changeWord()中添加nonlocal word, answer,告诉Python当前函数要使用外层作用域的这两个变量,而非创建新的局部变量。 - 答对后调用
wordEntry.set("")清空输入框,方便下一次输入。
内容的提问来源于stack exchange,提问作者d4ks
相关产品推荐
相关产品推荐

