0

由于更改小部件状态的许多操作,我的代码变得混乱。例如,我有大约 8 个按钮,我想要 fg='red', text='press to config" 当分配给它们的连接变量的值是 None (在用户进行输入之前)。对于其中一些我想要当满足某些条件以防止用户进行任何输入时使它们状态='禁用'。有没有一种简单的方法可以以某种方式对它们进行分组然后使用单个命令?例如:

for btn in btns_list:
    if btn connected variable is not None:
        btn.config(text='Press to reconfig', fg='green')

看起来它可以通过字典以某种方式管理,对吗?任何建议都值得赞赏,因为目前我大约 1/5 的代码在更改小部件配置时获得了“乐趣”,而且当项目变得越来越大时,管理起来并不容易。

4

1 回答 1

2

您已经使用简单的方法,您可以通过 记住每个按钮的 id,按钮的id 将在my_btn = Button(master, ...)哪里。my_btn然后将它们收集到列表中,并在每次要调用按其 ID 添加的所有按钮时使用 for 循环。看:

import tkinter as tk

button_list = []

master = tk.Tk()

def change_color():
    for button in button_list:
        button.config(bg='red')

my_btn = tk.Button(master, text="Button 1")
my_btn.pack()
button_list.append(my_btn)
my_btn = tk.Button(master, text="Button 2")
my_btn.pack()
button_list.append(my_btn)
my_btn = tk.Button(master, text="Button 3")
my_btn.pack()
button_list.append(my_btn)
my_btn = tk.Button(master, text="CHANGE COLOR", command=change_color)
my_btn.pack()


master.mainloop()

您可以使用字典而不是列表来选择您需要的按钮,这将是更好的做法。

当然,您可以参考上面代码中的所有按钮,但我认为您永远不需要它。

顺便说一句,您不需要使用is not None,因为if btn connected variable已经返回布尔值,因此您的循环应如下所示:

for btn in btns_list:
    if btn connected variable:
        btn.config(text='Press to reconfig', fg='green')

编辑1:

使用字典而不是列表的示例:

import tkinter as tk

# dictionary with buttons
d = {} 
master = tk.Tk()

def change_color():
    # for loop for dict keys
    for button in d.keys():
        # here we refer to each button(value of button key)
        # and change the color
        #
        # here you can add some if statements to edit particular group
        # of buttons
        d[button].config(bg='red')

my_btn = tk.Button(master, text="Button 1")
my_btn.pack()
d['group1_btn_name1'] = my_btn
my_btn = tk.Button(master, text="Button 2")
my_btn.pack()
d['group2_btn_name2'] = my_btn
my_btn = tk.Button(master, text="Button 3")
my_btn.pack()
d['group1_btn_name3'] = my_btn
my_btn = tk.Button(master, text="CHANGE COLOR", command=change_color)
my_btn.pack()


master.mainloop()

但请记住 - 字典中的每个键都应该是唯一的,因此按钮名称(键)应该都不同(btn_name1, btn_name2, btn_name3)。您可以通过添加前缀来对它们进行分组some_group_btn1, some_group_btn2...other_group_btnnnn...

您可以创建具有任何名称的按钮和组,但某些东西(例如_)应该划分组前缀和按钮名称,以便在字典键中定义特定的组名称。例如,您可以添加这样的 if 语句:

if 'group1' in button.split('_'):
    d[button].config(bg='red')

它将修改仅引用group1组的按钮。但请记住,由于拆分操作,除法符号_-您想要的符号应始终相同。

  1. 在此处检查字典键
  2. 关于这里拆分
于 2020-04-04T14:13:55.423 回答