Tkinter单选按钮奇怪的外观

时间:2019-11-08 08:29:39

标签: python tkinter

我正在尝试使用一个类创建一个Radiobutton集合,但是所有按钮都在开头进行了检查

当我尝试在Radiobutton的创建阶段输入变量时,收到错误消息。

from tkinter import *

SubTests = ['Test 1', 'Test 2', 'Test 3', 'Test 4', 'Test 5', 'Test 6', 'Test 7', 'Test 8', 'Test 9', 'Test 10']

class GUI:
    def __init__(self, master=NONE):
        self.master = master
        rb = [NONE]*len(SubTests)
        for i in range(len(SubTests)):
        rb[i] = Radiobutton(master, text=SubTests[i], fg='black', value=i)
        rb[i].grid(column=0, row=(2 + i), sticky=W, padx=5)

root = Tk()
root.geometry('940x550')
root.resizable(FALSE,FALSE)
root.title("GUI Template")

display = GUI(root)

root.mainloop()

应该出现Radiobutton的Test1,Test2,...,Test10未被选中,但不是全部被选中。

2 个答案:

答案 0 :(得分:1)

以下是设置按钮以及我已命名为IntVar的{​​{1}}变量的方法,以保存与当前“推送”到的choice相对应的值(如果有) 。我还通过为它们添加前缀Radiobuttonrb类实例的GUI实例属性来实现它们。因为所有方法都会自动传递self.作为它们的第一个参数,所以可以从类的其他方法中引用它们。

为演示如何使用这些实例属性,代码还利用了self选项,即command=必须指定每次用户更改其状态时都要调用的“回调”函数。

Radiobutton

答案 1 :(得分:0)

单选按钮需要将variable属性设置为tkinter变量对象之一(IntVarStringVar等)的实例。 Tkinter使用以下事实:多个单选按钮共享同一变量,以使其具有排他的选择行为。

由于使用整数值,因此可以使用IntVar。您需要在循环外创建该变量,然后在循环内使用它。以下代码创建一个变量(self.var),并将其与每个单选按钮(variable=self.var)相关联

class GUI:
    def __init__(self, master=NONE):
        self.master = master
        self.var = IntVar(value=0)
        rb = [NONE]*len(SubTests)
        for i in range(len(SubTests)):
            rb[i] = Radiobutton(master, text=SubTests[i], fg='black',
                                value=i, variable=self.var)
            rb[i].grid(column=0, row=(2 + i), sticky=W, padx=5)