Чтобы Checkbutton содержал значение, необходимо использовать BoolVar (или любую другую переменную) из tkinter.Это обычно довольно утомительно, так как вам нужно будет создать переменную для каждой кнопки.Этого можно избежать путем подкласса Checkbutton и добавления хранилища для переменной.Поскольку вам также требуется текст, мы также можем использовать класс для хранения текстового значения.
Замена флажков на приведенный ниже класс сделает это.
class CheckBox(tkinter.Checkbutton):
boxes = [] # Storage for all buttons
def __init__(self, master=None, **options):
tkinter.Checkbutton.__init__(self, master, options) # Subclass checkbutton to keep other methods
self.boxes.append(self)
self.var = tkinter.BooleanVar() # var used to store checkbox state (on/off)
self.text = self.cget('text') # store the text for later
self.configure(variable=self.var) # set the checkbox to use our var
Затем мы будем использоватькласс для создания кнопок следующим образом:
a=0
while a<len(ldv1):
bouton=CheckBox(tk, text=ldv1[a], command=print(ldv1[a])) # Replace Checkbutton
a=a+1
bouton.pack()
И, наконец, чтобы получить значения, когда окно закрыто, вы можете перебирать CheckBox.buttons для значения каждой кнопки.Вам необходимо добавить это после основного цикла или добавить его в функцию.
for box in CheckBox.boxes:
if box.var.get(): # Checks if the button is ticked
lr.append(box.text)
print(lr)