(带有JSON的Radiobutton)如何检查选择了哪个Radiobutton

时间:2018-01-11 01:17:31

标签: python python-3.x tkinter

我想在点击Lib.BaseMVH Radiobutton时对数字进行排序。我已经通过在单击Radiobutton时调用函数来实现此目的。但是,如果不调用函数,我无法对数字进行排序。 这是我的代码

sort numbers

如果我说例如R1=Radiobutton(root,text="Sort Student Numbers",value=1) R1.pack(anchor=W) R2=Radiobutton(root,text="Sort Student Names",value=2) R2.pack(anchor=W) with open("student.json", "r"") as f: data = json.load(f) for d in data["student"]: if value == 1: data["student"].sort(key = lambda d: d["Numbers"]) elif value == 2: data["student"].sort(key = lambda d: d["Names"]) label_1 = Label(frame , text="Name: %s" %(d["Names"])) label_1.pack() label_2 = Label(frame , text="Student Numbers: %d" %(d["Numbers"])) label_2.pack() 一切正常但我不想使用函数调用的原因是我必须创建3个函数来实现我想要的。感谢

1 个答案:

答案 0 :(得分:1)

解决此问题的一种方法是将这些单选按钮绑定到共享的tkinter变量实例。选择单选按钮后,变量的值将设置为单选按钮的值,然后您可以在代码中使用该值。

我没有时间测试这段代码,但我已经复制了代码并以适合的方式修改了代码。此代码假定您使用行from tkinter import *从tkinter导入所有内容;否则,你需要做from tkinter import IntVar之类的事情。有几种类型的tkinter变量子类(IntVarBooleanVar等),每种类型都有方法getset,它们的行为与您完全一样。 d expect(如下所示)。

# This is the variable that will store the value of the currently selected radio button
sort_value = IntVar()

# For each radio button, assign sort_value to the keyword parameter "variable"
R1=Radiobutton(root,text="Sort Student Numbers",variable=sort_value,value=1)
R1.pack(anchor=W)
R2=Radiobutton(root,text="Sort Student Names",variable=sort_value,value=2)
R2.pack(anchor=W)

with open("student.json", "r") as f:
        data = json.load(f)
        for d in data["student"]:
            # sort_value is an IntVar, so sort_value.get returns a Python int
            if sort_value.get() == 1:
               data["student"].sort(key = lambda d: d["Numbers"])
            elif sort_value.get() == 2:
                 data["student"].sort(key = lambda d: d["Names"])
            label_1 = Label(frame , text="Name: %s" %(d["Names"]))
            label_1.pack()
            label_2 = Label(frame , text="Student Numbers: %d" %(d["Numbers"]))
            label_2.pack()

编辑:与评论中指出的Nae一样,您也可以将变量初始化为默认值,如下所示:

sort_value = IntVar(value=1)

否则,其默认值为0.我相信通过将其设置为1,这也会导致默认情况下选择值为1的单选按钮。

我希望这会有所帮助。