как упаковать объект tkiner в другой класс? - PullRequest
0 голосов
/ 01 мая 2020
class SettingsFrame(tk.Frame):
    """docstring for SettingsFrame"""
    def __init__(self, master):
        self.master = master
        self = tk.Frame(self.master)

        self.url_label = tk.Label(self, text="Product URL")
        self.url_label.pack(side="left")
        self.url_entry = tk.Entry(self)
        self.url_entry.pack(side="left")


class Application(tk.Frame):
    def __init__(self, master=None):
        super().__init__(master)
        self.master = master
        self.pack()
        self.settings_frame = SettingsFrame(self)
        self.settings_frame.pack(side="top")

def main():
    root = tk.Tk()
    app = Application(master=root)
    app.mainloop()

if __name__ == "__main__":
    main()    

Я пытаюсь структурировать свой код, как предложено в этом ответе - { ссылка }, но я не уверен, как правильно упаковать () этот SettingsFrame с меткой и записью в Application класс.

AttributeError: 'SettingsFrame' object has no attribute 'tk'

1 Ответ

0 голосов
/ 01 мая 2020

Пожалуйста, попробуйте так:

    import tkinter as tk


    class SettingsFrame(tk.Frame):
        """docstring for SettingsFrame"""
        def __init__(self, master=None):
            super().__init__(master)

            self.url_label = tk.Label(self, text="Product URL")
            self.url_label.pack(side="left")
            self.url_entry = tk.Entry(self)
            self.url_entry.pack(side="left")


    class Application(tk.Frame):
        def __init__(self, master=None):
            super().__init__(master)
            self.settings_frame = SettingsFrame()
            self.settings_frame.pack(side="top")

    def main():
        root = tk.Tk()
        app = Application(master=root)
        app.mainloop()

    if __name__ == "__main__":
        main()

Я удалил следующие строки:

    self.master = master
    self = tk.Frame(self.master)

и добавил (для SettingsFrame):

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