ttk 创建多个复选按钮
ttk create multiple checkbuttons
我正在尝试制作一个显示大量复选按钮的 GUI,我从列表中创建它们;从列表中创建一个字典,并从字典中为每个复选按钮分配一个变量,这样我就可以稍后检查它的状态。
问题是所有复选按钮都显示为 'alternate' 状态,即使我将变量设置为 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
想通了,我做了一个 "toggle all" 按钮,它似乎修复了它,但奇怪的是它以前没有用。
这是我使用的函数:
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)
还有我运行新线程中的函数。
我正在尝试制作一个显示大量复选按钮的 GUI,我从列表中创建它们;从列表中创建一个字典,并从字典中为每个复选按钮分配一个变量,这样我就可以稍后检查它的状态。 问题是所有复选按钮都显示为 'alternate' 状态,即使我将变量设置为 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
想通了,我做了一个 "toggle all" 按钮,它似乎修复了它,但奇怪的是它以前没有用。
这是我使用的函数:
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)
还有我运行新线程中的函数。