我有一些对象,它们都是同一类的实例;每个对象都有(作为其属性之一)一个 tkinter 按钮,我希望每个 tkinter 按钮对其所属的对象执行一个方法。我不太确定如何去做这件事。我尝试过修改 lambda 函数,并用“self_”替换“self”,以防 tkinter 已经将“self”传递给按钮的命令,但这些都不起作用;我是类(class)新手,在今天之前没有遇到过 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()
最佳答案
代码的唯一问题是您需要调用 grid_forget
而不是 forget
。
此外,该代码有点误导 - delete
方法实际上并没有删除任何内容,它只是将其从 View 中删除。小部件仍然存在并占用内存。你知道吗?如果您确实想要删除小部件,请调用 destroy
方法。
关于python - Tkinter 按钮调用对象上的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27619173/