一次配置Tkinter应用程序的所有按钮的理想方法?



这是我的第一个tkinter/gui项目。我设置了一个 mvc 模式,并为我的应用程序的每个窗口提供了一个视图类。
主窗口的示例:

class ViewMain(tk.Frame):
def __init__(self, master):
tk.Frame.__init__(self, master, height = 300, width = 500)
self.pack(fill='both', expand=True)
self.BUTTON_SIZE = {'relheight' : 0.3, 'relwidth' : 0.35}
self._set_widgets()
self._set_layout()
def _set_widgets(self):
self.button = tk.Button(self, text = 'Text')
def _set_layout(self):
self.button.place(relx = 0.1, rely = 0.15, **self.BUTTON_SIZE)

目前,我有 6 个视图类,我想将按钮的浮雕更改为凹槽。由于我有 30+ 个按钮,我正在寻找一种不一直写以下内容的方法:

self.button = tk.Button(self, text = 'Text', relief = 'groove')

如您所见,我思路中的一个缺陷是我已经使用重复方法来配置按钮的大小。但是,让我们忽略这一点。
由于我对所有这些都相当陌生,我看到了三种方法:

  • 每次创建按钮时添加"浮雕='凹槽'"作为选项
  • 使用 ttk。按钮并配置样式。但是我必须为每个视图类执行此操作,并在每次创建按钮时添加样式
  • 为 tk 编写一个包装器。按钮并改用它

最后一个选项让我想到了这一点:

class CustomButton(tk.Button):
def __init__(self, master, text):
super().__init__(master, text = text, relief = 'groove')

哪个有效,但我无法停止思考是否有更好的方法来解决这个问题?

我没有测试它,但我的工作方式是这样的:

for widget in root.winfo_children():
if isinstance(widget, tk.Button):
widget.configure(relief = 'groove')

winfo_children(( 为您提供了所有小部件。 使用 if is实例,您可以检查小部件是否是 tkinter 的实例。按钮。 如果确实如此,您可以按照自己喜欢的方式配置按钮。

我以前做过这样的事情,效果很好。

最新更新