ttk создать несколько флажков

Я пытаюсь создать графический интерфейс, отображающий множество кнопок-флажков, я создаю их из списка; создайте словарь из списка и назначьте каждой контрольной кнопке переменную из словаря, чтобы я мог проверить ее состояние позже. Проблема в том, что все флажки отображаются в «альтернативном» состоянии, даже если я установил переменную в 0 или 1, я также пробовал менять состояния, но ничего не помогает.

y = 0
        for x in get_dir_names(r'D:\SKL\test\win10'):
            drv_check[x] = Variable()
            drv_check[x].set(0)
            center_window(150, 500, top_child)
            drv = ttk.Checkbutton(child_frame, text=x, variable=drv_check[x])
            drv.grid(row=y, column=0, sticky=W)
            y += 1

для справки

def get_dir_names(dir_path):
    """Get names only of all directories from a given path (none recursive)"""
    drv_list = [x for x in os.walk(dir_path).__next__()[1]]
    drv_name = dict({})
    for y in drv_list:
        tmp_ver = dir_path + r'\\' + y
        drv_name[y] = (os.walk(tmp_ver).__next__()[1]).pop()
    return drv_name

person Alex Zel    schedule 22.06.2015    source источник


Ответы (1)


Разобрался, сделал кнопку "переключить все" и вроде поправил, но странно, что раньше не работало.

вот функция, которую я использовал:

def toggle_all(*args):
        while True:
            if toggle_all_var.get() == '1':
                for name in drv_check:
                    drv_check[name].set('1')
            elif toggle_all_var.get() == '0':
                for name in drv_check:
                    drv_check[name].set('0')

ttk.Checkbutton(drv_frame, text='Toggle all', variable=toggle_all_var).grid(row=y, column=0, sticky=W)

Также я запускаю функцию в новом потоке.

person Alex Zel    schedule 22.06.2015