单击按钮获取标签文本(Tkinter)

时间:2014-03-16 15:54:19

标签: python-2.7 tkinter

我是Python和Tkinter的新手,所以我正在尝试创建一个示例程序来探索。

程序基本上将名称显示为标签,然后将4个按钮放在标签旁边。

其中一个按钮是“删除”,我想要做的是,该按钮将获得该“删除”按钮旁边的标签名称。

代码是:

from Tkinter import *

class GUI():
    def __init__(self):
        self.namelist = ["Mark","Anna","Jason","Lenna",
                     "Leo","Zucharich","Robinson",
                     "AReallyLongNameThatMightExist"]
        self.canvas = Canvas(width=1200,height=700)
        self.canvas.pack(expand=YES,fill=BOTH)

    def Friends(self):
        frame = Frame(self.canvas)
        frame.place(x=600,y=300)
        #Frame for showing names of friends
        row = 0
        for x in self.namelist:
            label = Label(frame,text="%s "%x)
            chatButton = Button(frame,text="Chat")
            delButton = Button(frame,text="Delete")
            setcloseButton = Button(frame,text="Set Close")
            setgroupButton = Button(frame,text="Set Group")
            label.grid(row=row, column=0, sticky="W")
            chatButton.grid(row=row, column=1)
            delButton.grid(row=row, column=2)
            setcloseButton.grid(row=row, column=3)
            setgroupButton.grid(row=row, column=4)
            row = row + 1
        mainloop()

GUI = GUI()
GUI.Friends()

示例:如果您运行代码,那么当您单击“标记”旁边的“删除”按钮时,该按钮将返回“标记”。

谢谢!

1 个答案:

答案 0 :(得分:1)

Tk按钮具有命令选项,允许您指定单击按钮时要运行的代码。在这种情况下,您只想将兄弟小部件名称传递给您的函数。您可以通过在创建时捕获窗口小部件名称来执行此操作:

label = ...
delButton = Button(frame,text="Delete",
                   command=self.makeClosure(label))
...
def makeClosure(self, labelWidget):
    return lambda: self.onClick(labelWidget)
def onClick(self, labelWidget):
    print(labelWidget["text"])

在此示例中,当我们创建 delButton 小部件时,该命令被定义为一个lambda,它创建一个包含label变量的闭包,因为它是在定义此lambda时定义的。现在,当单击 delButton 时,此值将传递给 onClick 函数,该函数可以在运行时使用它来调用窗口小部件上的方法。