Python 3.x tkinter类作文不起作用

Python 3.x tkinter类作文不起作用,python-3.x,inheritance,tkinter,Python 3.x,Inheritance,Tkinter,我的意图是从几个类创建gui,作为练习,我创建了一个小示例。正如在应用程序self.greet中所看到的,应该是从类按钮创建的按钮,但我得到的是通用按钮(没有文本和回调函数)。 有什么建议吗 import tkinter as tk import tkinter.ttk as ttk class Button(ttk.Button): def __init__(self, parent): super().__init__(parent) self.

我的意图是从几个类创建gui,作为练习,我创建了一个小示例。正如在应用程序self.greet中所看到的,应该是从类按钮创建的按钮,但我得到的是通用按钮(没有文本和回调函数)。 有什么建议吗

import tkinter as tk
import tkinter.ttk as ttk

class Button(ttk.Button):

    def __init__(self, parent):
        super().__init__(parent)

        self.item = ttk.Button(parent, text="Greet", command=self.greet)

    def greet(self):
        print("Greetings!")

class App():

    def __init__(self, parent):        
        parent.title("A simple GUI")

        self.label = ttk.Label(parent, text="A label")
        self.greet = Button(parent)
        self.button = ttk.Button(parent, text="Close", command=parent.quit)

        self.label.grid(row=0, column=0, sticky=(tk.N, tk.S, tk.W, tk.E))
        self.greet.grid(row=1, column=0, sticky=(tk.N, tk.S, tk.W, tk.E))
        self.button.grid(row=2, column=0, sticky=(tk.N, tk.S, tk.W, tk.E))

        parent.grid_columnconfigure(0, weight=1)        

    def greet(self):
        print("Greetings!")

if __name__ == "__main__":
    root = tk.Tk()
    app = App(root)
    root.mainloop()

按钮的实例实际上只是没有文本或回调的通用按钮。每个按钮都包含(通过它们的
self.item
属性)一个fancier按钮,但该按钮对于用户来说永远都不可见,因为您从未对其进行打包或网格化


基本上,传递给
ttk.Button()
调用的参数应该在
super()调用中传递。\uuu init\uuu()
调用中传递,这样它们就会影响
按钮
对象本身。

按钮的实例实际上只是没有文本或回调的通用按钮。每个按钮都包含(通过它们的
self.item
属性)一个fancier按钮,但该按钮对于用户来说永远都不可见,因为您从未对其进行打包或网格化

基本上,传递给
ttk.Button()
调用的参数应该在
super()调用中传递,以便它们影响
按钮
对象本身。

您的新类是一个按钮,它不需要包含按钮

class FlebasButton(ttk.Button):
    def __init__(self, master):
        super().__init__(master, text="Greet", command=self.greet)

    def greet(self):
        print("Greetings!")
另外,为您的新类选择一个除“Button”以外的名称,这样您(和其他人)就不会将它与tk中的类混淆。tkinter在内部为父类使用“master”,因此通常最好也为tkinter对象使用“master”

您的新类是一个按钮,它不需要包含按钮

class FlebasButton(ttk.Button):
    def __init__(self, master):
        super().__init__(master, text="Greet", command=self.greet)

    def greet(self):
        print("Greetings!")

另外,为您的新类选择一个除“Button”以外的名称,这样您(和其他人)就不会将它与tk中的类混淆。tkinter在内部为父类使用“master”,因此通常最好也为tkinter对象使用“master”

如果您正在使用composition,那么您不应该继承
ttk.Button
。你们的课实际上创建了两个按钮。我确实在学习一些概念,所以我可以,但我错了。关于您的评论,如果我没有继承自
ttk.Button
class Button():
我得到
builtins.TypeError:object.\uu init\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu()不接受参数
?如果您使用的是复合,那么您就不应该继承自
ttk.Button<。你们的课实际上创建了两个按钮。我确实在学习一些概念,所以我可以,但我错了。关于您的评论,如果我不是继承自
ttk.Button
class Button():
我得到
builtins.TypeError:object.\uu init\uuu()不接受任何参数