注意:我不是贸易或教育程序员,所以请耐心等待。采取以下简单的应用程序:
import tkinter as tk
root = tk.Tk()
class app(tk.Frame):
def __init__(self, master=None):
super().__init__(master)
self.pack()
self.create_widgets()
def create_widgets(self):
self.button1= tk.Button(self, text='1')
self.button1.pack(side='top')
self.quit_button= tk.Button(self, text='quit', command=self.quit_button.destroy())
self.quit_button.pack(side='bottom')
application = app(root)
application.mainloop()
当我运行此代码时,我被告知destroy()不是quit_button的方法。如果我将其更改为:
self.quit_button= tk.Button(self, text='quit', command=self.dest)
我添加方法:
def dest(self):
self.quit_button.destroy()
然后它起作用 - 我认为这与按钮在创建时无法引用自身有关(如果可以,请更正/启发我,因为我不能完全理解这个行为)。
然而,我真正要问的是第一次程序运行 之后我收到此错误,我得到一个带有两个按钮的窗口,以及仅使用 按钮1(适当打包)的X额外窗口,其中X是我发生错误的次数。显然我可以“不这样做”#34;但是,了解tkinter如何以这种方式行事对我来说是非常有教育意义的。有人在这里熟悉OOP来帮忙吗?我先创建根窗口,所以在任何情况下都应该只有一个。
答案 0 :(得分:1)
您的代码中存在一些问题。全部在线:
self.quit_button= tk.Button(self, text='quit', command=self.quit_button.destroy())
首先,您要在创建它的同时尝试引用self.quit_button
。第二个有点相关的问题是,command=self.quit_button.destroy()
部分实际上试图调用这个不存在的Button
方法之一,而不仅仅是提供它的引用(因为其名称后面的()
个。)
这是修复了这些问题的版本:
import tkinter as tk
root = tk.Tk()
class app(tk.Frame):
def __init__(self, master=None):
super().__init__(master)
self.pack()
self.create_widgets()
def create_widgets(self):
self.button1= tk.Button(self, text='1')
self.button1.pack(side='top')
self.quit_button = tk.Button(self, text='quit')
self.quit_button.config(command=self.quit_button.destroy) # set function to execute
self.quit_button.pack(side='bottom')
application = app(root)
application.mainloop()