【问题标题】:tkinter Checkbutton default value and data returnedtkinter Checkbutton 默认值和返回的数据
【发布时间】:2019-10-22 03:12:08
【问题描述】:

我使用 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()

有两件事我没有预料到:

  1. 在 GUI 中默认是同时选择头 A 和头 B。(我希望默认是不选择头)
  2. 关闭 GUI 后,我只能在 shell 中调用 parameters 时获得 ['','']

有人知道怎么回事吗?

【问题讨论】:

  • Checkbutton 的变量需要被赋予一个与其onvalueoffvalue 匹配的值,它才能正常工作。并且parameters 在主循环之前被设置一次;它只会及时反映当时的变量值。

标签: python tkinter tkinter.checkbutton


【解决方案1】:

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)
...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-10-13
    • 1970-01-01
    • 2019-02-22
    • 2013-01-19
    • 2021-02-09
    • 1970-01-01
    • 2022-08-18
    相关资源
    最近更新 更多