我正在尝试创建一个包含多组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中),反之亦然。
我该如何解决这个问题?
答案 0 :(得分:1)
这不起作用,因为您需要使用variable class而不是您所做的。
我的意思是,你需要改变这一行:
settingSort = ""
为:
settingSort = tkinter.StringVar()
然后根据您的具体需要you need to initialize settingSort
。
答案 1 :(得分:0)
这是因为你没有使用tkinter中的in built变量类。
您需要执行以下操作:
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
小部件。我们使用每个variable
的{{1}}属性来指定与每个组关联的变量类(组1 的Radiobutton
和var1 >第2组)然后我们使用var2
属性来指定value
应该"存储" 在其关联中的值变量
这允许我们在2个"组" 中创建4个Radiobutton
s,它可以独立于其他"组&#更新两个变量34。