Идеальный способ настроить сразу все кнопки моего приложения Tkinter? - PullRequest
1 голос
/ 30 мая 2020

Это мой первый проект 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')

Как видите, один недостаток в моей мысли заключается в том, что я уже использую повторяющийся подход к настройке размера кнопок. Но давайте просто проигнорируем это.
Поскольку я новичок во всем этом, я вижу три способа сделать это:

  • Добавляйте «Relief = 'groove'» как вариант каждый раз Я создаю кнопку
  • Используйте ttk.Button и настраиваю стиль. Но мне пришлось бы делать это для каждого класса представления и добавлять стиль каждый раз, когда я создаю кнопку.
  • Напишите оболочку для tk.Button и используйте ее вместо

Последний вариант привел меня к следующему:

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

Что работает, но я не могу перестать думать, есть ли лучший способ подойти к этому?

1 Ответ

1 голос
/ 30 мая 2020

Я не тестировал это, но я бы работал следующим образом:

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

winfo_children () дает вам все виджеты. С помощью if isinstance вы проверяете, является ли виджет экземпляром tkinter.Button. Если это правда, вы настраиваете кнопку так, как вам нравится.

Я делал что-то подобное раньше, и все работало нормально.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...