我的目的是从几个班级创建gui,作为练习,我创建了一个小例子。从app中可以看出,self.greet应该是从Button类创建的按钮,但我得到的是通用按钮(没有文本和回调函数)。 有什么建议吗?
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()
答案 0 :(得分:1)
您的班级Button
的实例确实只是没有文字或回调的通用按钮。每个包含(通过他们的self.item
属性)一个发烧友按钮,但该按钮实际上永远不会被用户看到,因为你从不打包或网格化。
基本上,您传递给ttk.Button()
来电的参数应该在super().__init__()
调用中传递,以便它们影响Button
对象本身。
答案 1 :(得分:1)
您的新班级是一个按钮,它不需要包含一个按钮。
class FlebasButton(ttk.Button):
def __init__(self, master):
super().__init__(master, text="Greet", command=self.greet)
def greet(self):
print("Greetings!")
另外,选择"按钮"以外的名称。为你的新课程,以便你(和其他人)不要把它与tk的班级混淆。并且tkinter使用" master"在内部为父类,所以通常更好地使用" master"以及tkinter对象。