Создать класс фреймов в Tkinter Gui

1

Я работаю над Gui, и мне хотелось бы знать, как создать класс, который будет реализовывать фрейм.

например.

class WindowContent(Tkinter.?)
    """ This class would create a frame for my program window """


class App(Tkinter.Tk):
    """ main window constructor """
    def __init__(self):
        Tkinter.Tk.__init__(self)
        program_window = WindowContent ?
        self.config(window = window_content) ?

Rgds,

Теги:
class
user-interface
tkinter
frame

2 ответа

1
Лучший ответ

Я нашел ответ:

class WindowProgram(Tkinter.Frame)
    """ This class creates a frame for my program window """
    def __init__(self, parent):
        Tkinter.Frame.__init__(self, parent)

class App(Tkinter.Tk):
    """ application constructor """
    def __init__(self):
        Tkinter.Tk.__init__(self)
        self.window_program = Window_Program(self)
0

Почему вам нужен класс, который создает несколько фреймов? Создание одного класса, создающего несколько фреймов, не очень хорошее решение. Для этого вам не нужен ни один класс.

Создавайте отдельные классы для каждого фрейма или просто создавайте в своем приложении методы для создания каждого фрейма. Я предпочитаю последнее, но если вам нужен фрейм, который можно использовать в нескольких контекстах, иногда имеет смысл создать класс.

Когда я создаю GUI, я строю свой код следующим образом:

class App(Tkinter.Tk):
    def __init__(self):
        Tkinter.Tk__init__(self)
        self.menubar = self.makeMenubar(...)
        self.frame1 = self.makeFrame1(...)
        self.frame2 = self.makeFrame2(...)

        self.configure(menu=self.menubar)
        self.frame1.grid(...)
        self.frame2.grid(...)

Таким образом, каждый основной раздел получает свой собственный метод, чтобы скрыть детали создания виджета. Разумеется, каждый кадр может быть настраиваемым объектом, но обычно это ненужно.

  • 0
    Спасибо за ответ. На самом деле я уже сделал класс для строки меню (благодаря вашей помощи), поэтому я бы предпочел также сделать класс для рамки. Как я могу сделать это, пожалуйста?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню