【发布时间】:2021-11-05 23:13:05
【问题描述】:
所以我试图在 python tkinter 中创建一个程序,为用户选择不同的困难创建 3 个单选按钮。我创建了一个变量 diffLevel = IntVar() 并尝试使用这些单选按钮更改它。然后,当用户选择了难度时,他按下一个按钮,该按钮激活一个命令,该命令尝试读取 diffLevel 的值并根据其值执行不同的命令。但是,由于某种原因,它不起作用。代码如下:
win = Tk()
win.geometry('250x250+650+250')
diffLevel = IntVar()
diffChoiceE = Radiobutton(win, text="Easy", variable=diffLevel, value=0)
diffChoiceE.place(x=10, y=10)
diffChoiceM = Radiobutton(win, text="Medium", variable=diffLevel, value=1)
diffChoiceM.place(x=10, y=35)
diffChoiceH = Radiobutton(win, text="Hard", variable=diffLevel, value=2)
diffChoiceH.place(x=10, y=60)
def diffSet():
a = diffLevel.get()
if a == 0:
setSpades()
elif a == 1:
setSpades()
setHearts()
elif a == 2:
setSpades()
setHearts()
setClubs()
setDiamonds()
win.destroy()
ch = Button(win, text="Choose", width=7, height=1, command=diffSet)
ch.place(x=100, y=80)
win.mainloop()
我尝试打印“a”,但由于某种原因,它显示为“0”,即使我选择了使 diffLevel 等于 1 或 2 的单选按钮。我尝试使用 ttk 模块,但单选按钮不起作用所有人都表现得好像他们被按下了一样。那么如何从 diffLevel 中获取正确的值呢?
【问题讨论】:
-
Var 不起作用的可能原因:多次调用
Tk(),在调用Tk()之前创建一个小部件,仅使用局部变量引用 Var,以便它得到垃圾 -在实际使用之前收集。我在您的代码中没有看到任何这些问题,但这显然是一个更大程序的摘录,所以我不知道您在其他地方做了什么。我们需要一个 minimal reproducible example - 实际运行的东西,它实际展示了问题。 -
@jasonharper 哦,我意识到在此之前我使用 Tk() 创建了一个不同的窗口,我想创建一个询问难度级别的窗口,然后创建另一个实际运行游戏的窗口。我会换一种方式,谢谢你的帮助。
-
创建附加窗口的正确方法是
Toplevel()。Tk()的每个实例都有自己独立的一组变量;尝试将一个与属于不同实例的小部件一起使用将静默失败。