我是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()
示例:如果您运行代码,那么当您单击“标记”旁边的“删除”按钮时,该按钮将返回“标记”。
谢谢!
答案 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 函数,该函数可以在运行时使用它来调用窗口小部件上的方法。