You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 22:11:05