我有一些对象,它们都是同一个类的实例;每个对象都有(作为其属性之一)一个tkinter按钮,我希望每个tkinter按钮对它所属的对象执行一个方法。我真的不确定如何去做这件事。我尝试修改lambda函数,并将“self”替换为“self_”,以防tkinter已经将“self”传递给按钮的命令,但这些都不起作用;我是新手,并且在今天之前没有遇到lambda函数所以它并没有让我感到惊讶。示例代码如下 - 请有人解释如何以简单,简洁和pythonic的方式使其工作,或者如果不存在这样的解决方案然后提供解决方法?提前致谢
import tkinter as tk
from tkinter import ttk
class SpecialButton():
def __init__(self, row):
self.button = ttk.Button(root, text="button", command=self.delete)
self.button.grid(row=row, column=1)
self.label = ttk.Label(root, text="label")
self.label.grid(row=row, column=2)
def delete(self):
self.button.forget()
self.label.forget()
#some other stuff
root = tk.Tk()
for row in range(3):
SpecialButton(row)
root.mainloop()
答案 0 :(得分:2)
您的代码唯一的问题是您需要拨打grid_forget
而不是forget
。
此外,代码有点误导 - delete
方法实际上并没有删除任何内容,只是将其从视图中删除。小部件仍然存在并占用内存。你知道吗?如果您确实要删除小部件,请调用destroy
方法。