Tkinter按钮调用对象的方法

时间:2014-12-23 11:10:38

标签: python class oop button tkinter

我有一些对象,它们都是同一个类的实例;每个对象都有(作为其属性之一)一个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 个答案:

答案 0 :(得分:2)

您的代码唯一的问题是您需要拨打grid_forget而不是forget

此外,代码有点误导 - delete方法实际上并没有删除任何内容,只是将其从视图中删除。小部件仍然存在并占用内存。你知道吗?如果您确实要删除小部件,请调用destroy方法。