为什么super()将我的Tkinter小部件加倍?

时间:2018-09-03 09:51:08

标签: python-3.x tkinter super

我目前正在编写一个应用程序,并为此创建了三个类。 第一类包含所有功能。第二类包含“窗口”小部件,第三类包含导航栏。

当我从第二个类继承第一个类时,按钮将起作用并执行功能。从导航类继承窗口类的那一刻起,我也从该类继承了函数类,我的小部件一下子翻了一番。 按钮起作用(两个按钮都起作用),但显然我不希望它加倍。

有人可以向我解释吗?

This is the output with inheritance from Start to FunctionClass

This is the output when TopMenu inherits from Start and Start from 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 :(得分:0)

继承表示是一个。如果“狗”是从“动物”继承而来的,则“狗” “动物”。

TopMenu继承自Start时,TopMenu StartStart可以或可以通过TopMenu完成的任何事情。因此,由于Start创建了一些小部件,因此从Start继承的任何内容也将创建小部件。

执行此操作时:

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

...首先使用g = Start(root)创建窗口小部件,然后在执行d = TopMenu时再次创建窗口小部件。同样,这是因为TopMenu _是Start