变量为 StringVar 时程序启动时未选中的单选按钮

Unchecked radiobuttons when the program starts while the variable is StringVar

这里我在程序启动时检查了所有单选按钮。但是,我希望首先检查其中 none 个,然后只有用户可以选择其中一个:

from tkinter import *
root = Tk()

var = StringVar()

l = Label(root)
l.pack()

def f():
    l.config(text=var.get())

rb1 = Radiobutton(root, text="First", variable=var, value='a', command=f)
rb1.pack()

rb2 = Radiobutton(root, text="Second", variable=var, value='b', command=f)
rb2.pack()

但与 IntVar 不一样:

from tkinter import *
root = Tk()

var = IntVar()

l = Label(root)
l.pack()

def f():
    l.config(text=var.get())

rb1 = Radiobutton(root, text="First", variable=var, value=1, command=f)
rb1.pack()

rb2 = Radiobutton(root, text="Second", variable=var, value=2, command=f)
rb2.pack()

当我 运行 这个程序按我想要的方式工作时 -- none 单选按钮在程序启动时被检查,我决定选择其中之一。

但是当变量是StringVar时,就不行了。我想弄清楚为什么它没有。我在几个来源中寻找任何解决方案,但我找不到任何有用的东西。所以决定在这里问问。任何帮助将不胜感激!

您应该能够将单选按钮设置为“ ” == "empty var",以便选择 none,但这没有意义,正如@bryan Oakley 所提到的。

我不是在最佳实践中通过向列表添加值来创建单选按钮,但这应该允许您拥有未选择的单选按钮

from tkinter import *
root = Tk()

def f():
    l.config(text=var.get())

var = StringVar()
var.set(' ')  #EVEN without the None value, this will allow empty radiobuttons on init. NOT Recommended

values = ['None', 'a', 'b']

l = Label(root, width=20)
l.pack()

for vset in values:
    rb = Radiobutton(root, text="First", variable=var, value=vset, command=f)
    rb.pack()

root.mainloop()