我想在点击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个函数来实现我想要的。感谢
答案 0 :(得分:1)
解决此问题的一种方法是将这些单选按钮绑定到共享的tkinter变量实例。选择单选按钮后,变量的值将设置为单选按钮的值,然后您可以在代码中使用该值。
我没有时间测试这段代码,但我已经复制了代码并以适合的方式修改了代码。此代码假定您使用行from tkinter import *
从tkinter导入所有内容;否则,你需要做from tkinter import IntVar
之类的事情。有几种类型的tkinter变量子类(IntVar
,BooleanVar
等),每种类型都有方法get
和set
,它们的行为与您完全一样。 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的单选按钮。
我希望这会有所帮助。