Я играю с tkinter, и я хотел применить это к проблеме, которую пытаюсь решить. базовый код основан на учебном пособии, найденном в разделе «Простая программа Hello World», найденном по адресу https://docs.python.org/3/library/tkinter.html. Я перехожу в каталог, создаю список этого каталога и создаю флажки на основе найденных там файлов. Когда я проверяю или убираю галочку с одной из кнопок в настоящий момент, она печатает "Привет всем!" на консоль.
Предположим, что os.listdir () возвращает: my_list = [file1, file2, file3, file4, file5]
в конечном счете, я хочу получить словарь с именем файла и состоянием флажка, например это:
my_dict {файл1: 1, файл2: 0, файл3: 0, файл4: 1, файл5: 1}.
Мне также нужно обновить это в режиме реального времени, пока программа не закончится.
Я мог бы сделать это, если бы вручную создавал каждую кнопку-флажок по отдельности, но время от времени менялось число файлов, и мне не пришлось бы возвращаться и менять свой сценарий каждый раз, когда файл добавляется или удаляется. ,
Как получить переменную каждой сгенерированной кнопки-флажка и обновлять это значение в словаре каждый раз, когда он отмечен / не отмечен?
import tkinter as tk
import os
os.chdir('c:\\some\\path\\here')
my_list = os.listdir()
class Application(tk.Frame):
def __init__(self, master=None):
super().__init__(master)
self.master = master
self.pack()
self.create_widgets()
def create_widgets(self):
for filename in my_list:
var = tk.IntVar()
self.filename = tk.Checkbutton(self, text=filename, variable=var, command=self.check_state)
self.items[filename] = var #this is where i'm getting the 'application has no member' error
self.filename.pack(side="top")
self.quit = tk.Button(self, text="Cancel",
command=self.master.destroy)
self.quit.pack(side="bottom")
def check_state(self):
my_dict = {filename:self.items[filename].get() for filename in self.items} #getting the same 'application has no member' error here as well
print(my_dict)
root = tk.Tk()
app = Application(master=root)
app.mainloop()