【发布时间】:2022-01-22 08:05:27
【问题描述】:
我想允许用户配置应用程序的外观(背景颜色、字体、字体大小和颜色、按钮颜色等)。我已将所有默认设置保存到一个配置文件中,程序将其解释并保存到一个类中的变量中,以便在函数之间进行访问。现在,我可以将用户所做的更改保存到配置文件中,这些更改将在用户关闭并重新打开应用程序时反映出来,但我希望更改是即时的,所以我尝试了这样的操作:
import tkinter as tk
class SetColor:
def __init__(self, color):
self.color = 'green'
current = SetColor('green')
root = tk.Tk()
lbl_color = tk.Label(root, text='Choose button color')
lbl_color.grid(row=0, column=0, pady=5, padx=2)
btn_red = tk.Button(root, text='Red', bg=current.color, command=lambda:update_color('red'))
btn_red.grid(row=0, column=1, pady=5, padx=2)
btn_green = tk.Button(root, text='Green', bg=current.color, command=lambda:update_color('green'))
btn_green.grid(row=0, column=2, pady=5, padx=2)
btn_blue = tk.Button(root, text='Blue', bg=current.color, command=lambda:update_color('blue'))
btn_blue.grid(row=0, column=3, pady=5, padx=2)
def update_color(color):
current.color = color
#THIS is where I'm wondering if there's a way to refresh without individually updating each widget as I've done below
btn_red.config(bg=current.color)
btn_green.config(bg=current.color)
btn_blue.config(bg=current.color)
root.mainloop()
这确实有效,但在我的实际应用程序中,与此示例相比,需要更新的小部件要多得多。所以我有一种感觉,我错过了一些东西,或者以错误的方式处理这个问题。非常感谢任何帮助:)
【问题讨论】:
-
有点困惑,如果上面的代码有效。您到底在寻找什么?
-
@Meritor 我正在寻找一种方法来基本上完成我上面所做的工作,而不必对整个程序中的每个小部件的配置更改进行硬编码。以上对于这三个小按钮都适用,但我可能有数百个小部件需要更新。将尝试 Maarten T. 的答案,看看情况如何。
标签: python tkinter refresh configure