首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >一次配置我的Tkinter应用程序的所有按钮的理想方法?

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

Stack Overflow用户
提问于 2020-05-30 12:12:16
回答 1查看 332关注 0票数 1

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

主窗口的一个示例:

代码语言:javascript
复制
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+按钮,所以我一直在寻找一种不编写以下内容的方法:

代码语言:javascript
复制
self.button = tk.Button(self, text = 'Text', relief = 'groove')

正如您所看到的,我思路中的一个缺陷是,我已经在使用重复的方法来配置按钮的大小。但让我们忽略这一点。

由于我对所有这些都相当陌生,我看到了三种方法:

  • 在每次创建按钮
  • 时都会添加“ttk.Button =‘

’”作为选项,使用ttk.Button并配置样式。但是,每次创建按钮时,我都必须为每个视图类添加样式,

  • 为tk.Button编写一个包装器,然后使用

最后一种选择使我想到了这一点:

代码语言:javascript
复制
class CustomButton(tk.Button):
def __init__(self, master, text):
    super().__init__(master, text = text, relief = 'groove')

这是可行的,但我不能停止思考,如果有更好的方法来处理这个问题?

EN

回答 1

Stack Overflow用户

发布于 2020-05-30 12:28:59

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

代码语言:javascript
复制
for widget in root.winfo_children():
    if isinstance(widget, tk.Button):
        widget.configure(relief = 'groove')

winfo_children()为您提供了所有小部件。使用if isinstance,您可以检查小部件是否是tkinter.Button的实例。如果是真的,您可以按自己喜欢的方式配置Button。

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62102253

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档