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

Tkinter测验单选按钮重复点击重复加分问题求助

解决Tkinter测验程序重复加分的问题

嘿,我来帮你搞定这个Tkinter测验程序的加分问题~

你现在遇到的核心问题是:给正确选项的单选按钮绑定了command=ajouter1,这意味着每次点击这个按钮,不管它之前有没有被选中,都会触发一次加分,所以点3次就加3分,完全不符合“答对一次加1分”的需求。

解决方案思路

我们需要换一种方式来检测正确选项:

  1. 不要给单选按钮绑定command,而是监听单选按钮关联的变量(也就是你的rep1)的变化
  2. 增加一个标记变量,记录该题目是否已经被答对过,避免重复加分
  3. 把分数更新的逻辑抽成通用函数,方便后续扩展多个题目

修改后的完整代码

import tkinter as tk
from tkinter import Toplevel

# 初始化窗口和变量
root = tk.Tk()
fenetre2 = Toplevel(root)
fenetre3 = Toplevel(root)

score = 0
var_label = tk.StringVar()
rep1 = tk.IntVar()  # 因为选项value是整数,用IntVar比StringVar更合适
q1_answered = False  # 标记第一题是否已获得分数

# 第一题的UI
Q1 = tk.Label(fenetre2, text="1) Comment se nomme le président français?", font='Helvetica 10 bold')
Q1.pack()
Q1A = tk.Radiobutton(fenetre2, text="Nicolas Sarkozy", value=2, variable=rep1)
Q1A.pack()
Q1B = tk.Radiobutton(fenetre2, text="Emmanuel Macron", value=1, variable=rep1)
Q1B.pack()
Q1C = tk.Radiobutton(fenetre2, text="François Hollande", value=3, variable=rep1)
Q1C.pack()

# 检查第一题答案的函数
def check_q1(*args):
    global score, q1_answered
    # 只有当选中正确选项且未加过分时,才更新分数
    if rep1.get() == 1 and not q1_answered:
        score += 1
        q1_answered = True  # 标记已加分,防止重复触发
        update_score_label()

# 更新分数标签的通用函数
def update_score_label():
    score_text = f"Bravo, Votre score est de: {score}/10"
    var_label.set(score_text)

# 监听rep1变量的变化,当值改变时触发检查函数
rep1.trace_add('write', check_q1)

# 初始化分数标签
var_label.set("Bravo, Votre score est de: 0/10")
Score = tk.Label(fenetre3, textvariable=var_label, font='Helvetica 10 bold')
Score.pack()

root.mainloop()

关键改进点说明

  • 去掉command绑定:改用trace_add('write', check_q1)监听单选按钮变量的变化,只有当用户切换选项时才触发检查
  • 增加q1_answered标记:确保每个题目只有第一次选对时才加分,避免重复点击正确按钮多次加分
  • 通用分数更新函数:把更新分数标签的逻辑单独抽出来,后续添加其他题目时可以直接复用

如果后续要添加更多题目,你可以用字典来管理所有题目的已答状态,比如:

answered = {"q1": False, "q2": False, "q3": False}

这样代码会更整洁,也更容易维护~

内容的提问来源于stack exchange,提问作者Jérémie K

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 07:34:19