我有一些对象,它们都是同一个类的实例;每个对象都有(作为其属性之一)一个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()
1 回答
您的代码唯一的问题是您需要调用
grid_forget
而不是forget
.此外,代码有点误导 -
delete
方法实际上并没有删除任何东西,它只是从视图中删除它 . 小部件仍然存在并占用内存 . 你知道吗?如果您确实要删除小部件,请调用destroy
方法 .