Tkinter 多个单选按钮组

Tkinter multiple Radiobutton groups

我正在尝试使用多组 TkInter Radiobutton 创建一个设置 window。他们应该修改我稍后可以使用的文本变量。

我有以下代码:

# 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 组中的按钮将取消选择 window(包括第 2 组)中的所有其他按钮,反之亦然。

我该如何解决这个问题?

这不起作用,因为您需要使用 variable class 而不是您所做的。

我的意思是,您需要更改此行:

settingSort = ""

至:

settingSort = tkinter.StringVar()

然后you need to initializesettingSort根据您的具体需要。

这是因为您没有使用来自 tkinter 的内置变量 classes。

您需要执行如下操作:

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()变量。就您需要关注的而言,这些只是 "containers",它们将特定小部件的值存储在它们自身中。我们创建了两个,因为我们有两个不同的 groups of Radiobutton widgets.

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 属性来分配与每个组关联的变量 class(var1 用于 组 1var2 for group 2) 然后我们使用 value 属性分配 Radiobuttons 应该 [=56 的值=] 在它们的关联变量中。

这允许我们在 2 "groups" 中创建 4 Radiobuttons,它可以独立更新两个变量 "group".