Я пытаюсь определить вызываемую функцию, которая должна принимать большой список элементов в качестве входных данных и через взаимодействие с пользователем возвращать подсписок извлеченных элементов.
Я довольно новичок в tkinter, но я искал стек после подобных проблем и использовал это для написания следующего кода. Я знаю, что использование глобальных переменных - плохая идея, и в этом случае она фактически не работает. Я попытался добавить все переменные отмеченных полей в глобальный lst, а затем попытался вернуть этот список, но не работает. Можно ли сделать новую функцию для экспорта списка или использовать виджет?
items = ['screw driver', 'belt', 'nut','hammer','tape','ducked tape','drill']
def choose_items(item_list):
import tkinter as tk
class App(object):
def __init__(self):
def click(event):
button.config(bg='green')
root = tk.Tk()
root.title('Choose items')
text = tk.Text(root, cursor='arrow')
vsb = tk.Scrollbar(root, command=text.yview)
button = tk.Button(root, text='Add items', command=addtolist)
button2 = tk.Button(root, text='Quit', command=root.destroy)
text.configure(yscrollcommand=vsb.set)
button.pack(side='top')
button2.pack(side='bottom')
button.bind('<Button-1>',click)
vsb.pack(side='right',fill='y')
text.pack(side='left', fill='both', expand=True)
global varList
varList = []
for i in range(len(items)):
var = tk.StringVar()
cb = tk.Checkbutton(text, text=item_list[i], variable=var,
onvalue=item_list[i], offvalue='')
varList.append(var)
text.window_create('end', window=cb)
text.insert('end','\n')
text.configure(state='disabled')
root.mainloop()
def addtolist():
global lst
lst = []
for i in varList:
if i.get() != ' ':
lst.append(i.get())
if __name__=='__main__':
App()
return lst
choose_items(items)
Я ожидаю, что на выходе будут элементы, которые проверял пользователь, но получаю следующее сообщение об ошибке:
NameError: имя 'lst' не определено