我是Python和Tkinter的新手,所以我尝试创建一个示例程序来探索。
该程序基本上显示名称作为标签,然后4个按钮将被放在旁边的标签。
其中一个按钮是"Delete“,而我想做的是,该按钮将得到标签的名称,就在”Delete“按钮旁边。
守则是:
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()
示例:如果运行代码,则当您单击"Mark“旁边的"Delete”按钮时,该按钮将返回"Mark“。
谢谢!
发布于 2014-03-16 09:19:10
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函数,该函数可以使用这个函数在运行时调用小部件上的方法。
https://stackoverflow.com/questions/22439106
复制相似问题