Значение кнопки проверки по умолчанию и возвращаемые данные - PullRequest
0 голосов
/ 22 октября 2019

Я использую 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()

Есть 2 вещи, которые я не ожидал:

  1. В графическом интерфейсе по умолчаниювыбрана и голова A, и голова B. (Я хочу, чтобы по умолчанию обе головы не были выбраны)
  2. Я могу получить ['',''] только тогда, когда я вызову parameters в оболочке после того, как я закрыл графический интерфейс.

Кто-нибудь знает, что идет не так?

1 Ответ

2 голосов
/ 22 октября 2019

1: добавьте value='NA', когда вы начинаете StringVar.

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