tkinter Checkbutton 默认值和返回的数据
tkinter Checkbutton default value and data returned
我使用 tkinter Checkbutton 获取所需的信息,我的脚本是:
from tkinter import *
from tkinter.filedialog import askopenfilenames
window = Tk()
window.title('File Viewer')
frm=Frame(window)
filelist=[]
def selectfiles():
files=askopenfilenames(initialdir="D:\Document", title="Select files")
fileList = window.tk.splitlist(files)
filelist.append(fileList)
btn = Button(frm,text='Select Files',command=selectfiles)
frm.pack()
btn.pack(side=RIGHT, fill=BOTH)
Heads = {'Head A': "HeadAEPTrend1 (Float)", 'Head B': "HeadBEPTrend1 (Float)"}
head_list=[]
for (key, value) in Heads.items():
strVar = StringVar()
head_list.append(strVar)
cb = Checkbutton(frm, text=key, variable=strVar, onvalue=value, offvalue='NA')
cb.pack(anchor=W)
parameters=[strvar.get() for strvar in head_list if strvar.get() != 'NA']
window.mainloop()
有两件事是我没想到的:
- 在 GUI 中默认是头 A 和头 B 都被选中。(我想要默认是两个头都没有被选中)
- 关闭GUI后在shell调用
parameters
只能得到['','']
有人知道怎么回事吗?
1:在您启动 StringVar
时添加 value='NA'
。
for (key, value) in Heads.items():
strVar = StringVar(value='NA')
...
2:考虑一下:
head_list=[]
...
parameters=[strvar.get() for strvar in head_list if strvar.get() != 'NA']
...
完成 parameters
的列表理解后,没有选择。您需要在单击复选按钮之后执行此操作,而不是之前。您可以通过向 Checkbutton
添加命令或在 StringVar
上跟踪更改来执行此操作。例如:
def get_parameters():
global parameters
parameters=[strvar.get() for strvar in head_list if strvar.get() != 'NA']
...
for (key, value) in Heads.items():
...
cb = Checkbutton(frm, text=key, variable=strVar, onvalue=value, offvalue='NA',
command=get_parameters)
...
我使用 tkinter Checkbutton 获取所需的信息,我的脚本是:
from tkinter import *
from tkinter.filedialog import askopenfilenames
window = Tk()
window.title('File Viewer')
frm=Frame(window)
filelist=[]
def selectfiles():
files=askopenfilenames(initialdir="D:\Document", title="Select files")
fileList = window.tk.splitlist(files)
filelist.append(fileList)
btn = Button(frm,text='Select Files',command=selectfiles)
frm.pack()
btn.pack(side=RIGHT, fill=BOTH)
Heads = {'Head A': "HeadAEPTrend1 (Float)", 'Head B': "HeadBEPTrend1 (Float)"}
head_list=[]
for (key, value) in Heads.items():
strVar = StringVar()
head_list.append(strVar)
cb = Checkbutton(frm, text=key, variable=strVar, onvalue=value, offvalue='NA')
cb.pack(anchor=W)
parameters=[strvar.get() for strvar in head_list if strvar.get() != 'NA']
window.mainloop()
有两件事是我没想到的:
- 在 GUI 中默认是头 A 和头 B 都被选中。(我想要默认是两个头都没有被选中)
- 关闭GUI后在shell调用
parameters
只能得到['','']
有人知道怎么回事吗?
1:在您启动 StringVar
时添加 value='NA'
。
for (key, value) in Heads.items():
strVar = StringVar(value='NA')
...
2:考虑一下:
head_list=[]
...
parameters=[strvar.get() for strvar in head_list if strvar.get() != 'NA']
...
完成 parameters
的列表理解后,没有选择。您需要在单击复选按钮之后执行此操作,而不是之前。您可以通过向 Checkbutton
添加命令或在 StringVar
上跟踪更改来执行此操作。例如:
def get_parameters():
global parameters
parameters=[strvar.get() for strvar in head_list if strvar.get() != 'NA']
...
for (key, value) in Heads.items():
...
cb = Checkbutton(frm, text=key, variable=strVar, onvalue=value, offvalue='NA',
command=get_parameters)
...