【问题标题】:How do I get the value from radiobuttons?如何从单选按钮中获取值?
【发布时间】: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() 的每个实例都有自己独立的一组变量;尝试将一个与属于不同实例的小部件一起使用将静默失败。

标签: python tkinter


【解决方案1】:

我已经稍微更改了代码以在我的计算机上运行,​​但似乎代码对我来说工作正常。

    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()
        print('Values of a: ',a)
        if a == 0:
            print('Spades')
        elif a == 1:
            print('Spades&Hearts')
        elif a == 2:
            print('Spades&Hearts&Clubs&Diamonds')
        #win.destroy()
    ch = Button(win, text="Choose", width=7, height=1, command=diffSet)
    ch.place(x=100, y=80)
    win.mainloop()

我已经选择了每个单选按钮,并且它们当前都在打印:

    Values of a:  0
    Spades
    Values of a:  1
    Spades&Hearts
    Values of a:  2
    Spades&Hearts&Clubs&Diamonds

我正在使用 python 3.7 和 TkVersion 8.6。你用的是哪个版本?

【讨论】:

  • 感谢您的回复,但我已经理解了这个问题。程序中有两个窗口,它们都使用了 Tk(),这就是它不起作用的原因。不过,感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 2018-05-04
  • 1970-01-01
  • 2021-04-09
  • 1970-01-01
  • 1970-01-01
  • 2018-10-07
  • 1970-01-01
  • 2021-08-26
相关资源
最近更新 更多