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
小部件。我们使用每个 Radiobutton
的 variable
属性来分配与每个组关联的变量 class(var1
用于 组 1 和 var2
for group 2) 然后我们使用 value
属性分配 Radiobutton
s 应该 [=56 的值=] 在它们的关联变量中。
这允许我们在 2 "groups" 中创建 4 Radiobutton
s,它可以独立更新两个变量 "group".
我正在尝试使用多组 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
小部件。我们使用每个 Radiobutton
的 variable
属性来分配与每个组关联的变量 class(var1
用于 组 1 和 var2
for group 2) 然后我们使用 value
属性分配 Radiobutton
s 应该 [=56 的值=] 在它们的关联变量中。
这允许我们在 2 "groups" 中创建 4 Radiobutton
s,它可以独立更新两个变量 "group".