Tkinter多个单选按钮群组

3
我正在尝试创建一个设置窗口,其中包含多个TkInter Radiobutton组。它们应该修改一个文本变量,以便我稍后可以使用它。
我有以下代码:
# radiobutton group 1
settingSort = ""
settingSortRadio1 = tkinter.Radiobutton(settingsWindow, text="Frequency", variable=settingSort, value="freq")
settingSortRadio1.select()
settingSortRadio1.pack()
settingSortRadio2 = tkinter.Radiobutton(settingsWindow, text="Alphabetical", variable=settingSort, value="alpha")
settingSortRadio2.pack()

#radiobutton group 2
settingAnalyseRadio1 = tkinter.Radiobutton(settingsWindow, text="Word frequency", variable=settingAnalyse, value="wfreq")
settingAnalyseRadio1.select()
settingAnalyseRadio1.pack()
settingAnalyseRadio2 = tkinter.Radiobutton(settingsWindow, text="Letter frequency", variable=settingAnalyse, value="lfreq")
settingAnalyseRadio2.pack()

然而,这些按钮似乎仍然属于同一组。选择组1中的一个按钮将取消选择窗口中所有其他按钮(包括组2中的按钮),反之亦然。

我该如何解决这个问题?

2个回答

4
这是因为您没有使用tkinter的内置变量类。您需要执行以下操作:

像下面这样:

from tkinter import *

root = Tk()

var1 = StringVar()
var2 = StringVar()

var1.set(0)
var2.set(0)

Radiobutton(root, text = "group1", variable = var1, value = 0).pack()
Radiobutton(root, text = "group1", variable = var1, value = 1).pack()
Radiobutton(root, text = "group2", variable = var2, value = 0).pack()
Radiobutton(root, text = "group2", variable = var2, value = 1).pack()

root.mainloop()

让我们分解一下,以便更容易理解。
var1 = StringVar()
var2 = StringVar()

所以我们创建了两个StringVar()变量。就你需要知道的而言,它们只是用于存储特定部件值的"容器"。我们创建两个变量是因为我们有两组不同的Radiobutton部件。

var1.set(0)
var2.set(0)

在上面的代码中,我们将StringVar()变量的值设置为每个组的第一个Radiobutton小部件的值(即我们即将初始化的小部件)。这意味着当Radiobutton小部件绘制时,每个组中的第一个小部件将默认被选中。
Radiobutton(root, text = "group1", variable = var1, value = 0).pack()
Radiobutton(root, text = "group1", variable = var1, value = 1).pack()
Radiobutton(root, text = "group2", variable = var2, value = 0).pack()
Radiobutton(root, text = "group2", variable = var2, value = 1).pack()

在上面的代码中,我们初始化了Radiobutton小部件。我们使用每个Radiobuttonvariable属性来分配与每个组相关联的变量类(对于group 1var1,对于group 2var2),然后我们使用value属性来分配Radiobuttons应在其关联变量中"存储"的值。
这使我们能够创建2个"组"中的4个Radiobutton,它们可以独立于其他"组"更新两个变量。

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接