Tkinter多个Radiobutton组

时间:2017-11-07 08:00:15

标签: python python-3.x tkinter tk

我正在尝试创建一个包含多组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 个答案:

答案 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 Radiobuttonvar1 >第2组)然后我们使用var2属性来指定value应该"存储" 在其关联中的值变量

这允许我们在2个"组" 中创建4个Radiobutton s,它可以独立于其他"组&#更新两个变量34。