Почему super () удваивает мои виджеты tkinter? - PullRequest
0 голосов
/ 03 сентября 2018

В настоящее время я пишу приложение и создал для него три класса. Первый класс содержит все функции. Второй класс содержит виджет «окно», а третий класс содержит панель навигации.

Когда я наследую от второго класса первый класс, кнопка работает и выполняет функции. В тот момент, когда я наследую от класса навигации класс окна, через который я наследую и класс функции, мои виджеты внезапно удваиваются. Кнопки работают (обе кнопки работают), но, очевидно, я не хочу, чтобы это удвоилось.

Может кто-нибудь объяснить это мне?

Это выходные данные с наследованием от Start до FunctionClass

Это вывод, когда TopMenu наследует от Start и Start от FunctionClass

Мой код:

from tkinter import *

class FunctionClass:

    def print_text(self):
        print("This is an example!")


class Start(FunctionClass):

    def __init__(self, master):
        super().__init__()
        frame = Frame(master)
        frame.pack()

        self.label = Label(frame,text="This is just a label.").pack()
        self.label2 = Label(frame, text="This is second label.").pack()
        self.button = Button(frame, text="Magic Button", command=self.print_text).pack()


class TopMenu(Start):

    def __init__(self, master):
        super().__init__(master)
    # *******Top-Navigation Bar**********
        tnb = Menu(master)
        root.config(menu=tnb)

    # *******tnb_file*******

        tnb_file = Menu(tnb, tearoff=0)
        tnb.add_cascade(label="File", menu=tnb_file)
        tnb_file.add_command(label="Button", command=self.print_text)
        tnb_file.add_separator()
        tnb_file.add_command(label="Exit", command=root.destroy)





root = Tk()
g = Start(root)
d = TopMenu(root)

root.mainloop()

1 Ответ

0 голосов
/ 03 сентября 2018

Наследование означает это . если «Собака» наследует от «Животного», «Собака» является «Животным».

Когда TopMenu наследуется от Start, TopMenu является Start. Все, что Start делает или может сделать, сделано или может быть сделано с помощью TopMenu. Таким образом, поскольку Start создает некоторые виджеты, все, что наследуется от Start, также создает виджеты.

Когда вы делаете это:

g = Start(root)
d = TopMenu(root)

... вы сначала создаете виджеты с помощью g = Start(root), а затем снова создаете виджеты, когда делаете d = TopMenu. Опять же, это потому, что TopMenu _ Start.

...