首先,如果我们只是想修改您的代码以单独为我们提供一个未选中的单选按钮,那么这样做就可以了。
from tkinter import Tk, IntVar, Radiobutton, mainloop, ttk
root = Tk()
frm = ttk.Frame(root)
frm.place(x = 0, y = 0, width = 1000, height = 1000)
v = IntVar()
Ek = ttk.Radiobutton(frm, text = "text", variable = v, value = 1)
Ek.place(x = 100, y = 100)
mainloop()
除了开始和结束时的设置样板外,我们在原始代码中唯一需要更改的就是将参数 variable = v, value = 1 添加到 Radiobutton 调用中。
这些额外的参数在孤立的情况下并没有真正的意义,因为同样的原因通常只有一个单选按钮没有意义。一旦我们添加了其中两个,我们就可以更好地看到发生了什么。
在@Stack 发布的文档 (this thing) 中,第一个代码示例如下所示:
from Tkinter import *
master = Tk()
v = IntVar()
Radiobutton(master, text="One", variable=v, value=1).pack(anchor=W)
Radiobutton(master, text="Two", variable=v, value=2).pack(anchor=W)
mainloop()
如果我们运行它,默认情况下我们会得到两个 未选中 单选按钮。如果我们将value=1 部分更改为value=0,第一个单选按钮显示为选中状态,如果我们将value=2 更改为value=0,第二个单选按钮显示为选中状态。所以value=0 似乎给了我们默认选中的按钮,但我们还不知道为什么。让我们多做一些实验。
如果我们尝试删除新样本中的片段,直到我们回到更接近您最初编写的内容,我们可以看到发生了什么。完全删除 value 参数并像这样运行它:
Radiobutton(master, text="One", variable=v).pack(anchor=W)
Radiobutton(master, text="Two", variable=v).pack(anchor=W)
默认情况下没有选中任何按钮,但随后进一步删除 variable 参数以使代码看起来像您的原始调用:
Radiobutton(master, text="One").pack(anchor=W)
Radiobutton(master, text="Two").pack(anchor=W)
为我们提供了两个默认情况下都选中的按钮,这让我们回到了原来的问题。
基本上,我们在这里遇到了各种奇怪的极端情况,因为我们刚刚开始摆弄代码并忘记了单选按钮实际代表什么。
单选按钮的概念首先代表的是变量的值。不是整个变量,只是它可能等于的事物之一。单选按钮集本身合在一起,为我们提供了离散变量的可视化表示:一个可以处于 N 个状态之一的事物。
因此,Radiobuttons 的 API 自然会要求我们提供一些信息,例如“您希望我们使用什么 Python 变量来保存这些值?” (大致是variable 关键字)和“您希望我们在幕后将哪些值粘到每个按钮上以区分不同的状态?” (即value 关键字)。
正如预期的那样,代码在上述值为 1 和 2 的情况下效果最佳,因为在这种情况下,代码在概念上正确地反映了单选按钮的实际含义。当我们碰撞这些值或将它们设置为零或完全忽略它们时,事情会变得有点奇怪且难以预测,因为我们正在处理 tkinter API 的实现细节,而不是使用单选按钮的简单概念该 API 旨在实现。
笔记本电脑快死了,所以我要继续点击发送。希望这不是太罗嗦。祝你好运。 :)