商店的单选按钮和值Checkbuttons
我想在下面的格式获得UI商店的单选按钮和值Checkbuttons
import pandas as pd from Tkinter import *
features = pd.read_csv("C:\\Users\\ggorantla\\Desktop\\Competition\\otto\\data\\train.csv",dtype=object)
features = features.columns
master = Tk()
row = 0
result = []
mappe = {}
def saver(each):
print(each, v.get())
result.append(v.get())
mappe[each] = v.get()
MODES = [ ("String", "str"), ("Number","num")]
for each in features:
if row >4 :
continue
Label(master, text=each).grid(row=row, column=0)
v = StringVar()
v.set("default")
col = 1
for text, mode in MODES:
Radiobutton(master, text=text, variable=v,value = mode, command=saver(each)).grid(row=row,column=col)
col+=1
print(v.get())
row += 1
mainloop()
我的问题是,当我运行这段代码,我得到的UI不如预期,但我无法将所有变量存储在mappe
字典或result
列表中。
所有值默认为“默认”值。我坚持这一个。
回答:
对于功能中的每个条目,您都会制作一个新的StringVar
v
,但不保存前一个以供日后参考。您应该制作v
字典并将StringVar
保存在它们所属功能的关键字下。
此外,command
参数需要对函数的引用,但您给它一个函数调用,这意味着该函数的返回值将被分配给command
。因此,而不是使用command=function()
,应该使用command=function
。因为要将变量传递给函数,所以需要command
调用一个调用实际函数的新函数。幸运的是,你可以做到这一点很容易使用lambda
功能像
command = lambda: saver(each)
但是,由于lambda
功能,只能判断被调用时,你需要指定要使用的each
在那个时候,而不是each
最后一次迭代。你这样做,使用
command = lambda each=each: saver(each)
然后,存储输入我建议使用字典而不是列表,因为您在使用他们的名字,不是他们的指数features
引用的项目。
结合了这一切,你的程序变为:
from Tkinter import * features = ['a', 'b', 'c', 'd']
master = Tk()
row = 0
mappe = {}
v = {}
def saver(each):
print(each, v[each].get())
mappe[each] = v[each].get()
print mappe
MODES = [ ("String", "str"), ("Number","num")]
for each in features:
if row >4 :
continue
Label(master, text=each).grid(row=row, column=0)
v[each] = StringVar()
v[each].set("default")
col = 1
for text, mode in MODES:
Radiobutton(master, text=text, variable=v[each],value = mode, command=lambda feature=each: saver(feature)).grid(row=row,column=col)
col+=1
row += 1
master.mainloop()
以上是 商店的单选按钮和值Checkbuttons 的全部内容, 来源链接: utcz.com/qa/263356.html