python - 返回特定字符串的按钮 [Tkinter]

标签 python python-2.7 tkinter

<分区>

我目前有一个将多个名称显示为标签的 Tkinter。

每个标签的右侧都有一个名为“Foo”的按钮,点击后,

它将调用一个函数,该函数需要被单击按钮左侧的标签名称。

这就是我创建按钮和标签的方式:

from Tkinter import *
class display():
    def __init__(self):
        self.namelist = ["Mike","Rachael","Mark","Miguel","Peter","Lyn"]
    def showlist(self):
        self.controlframe = Frame()
        self.controlframe.pack()
        self.frame = Frame(self.controlframe,height=1)
        self.frame.pack()
        row = 0
        for x in self.namelist:
            label = Label(self.frame,text="%s "%x,width=17,anchor="w") #limit the name to 17 characters
            fooButton = Button(self.frame,text="Foo")
            label.grid(row=row, column=0, sticky="W")
            fooButton.grid(row=row, column=1)
            row = row + 1
        mainloop()
D = display()
D.showlist()

如果我单击 Mark 旁边的 Foo 按钮,我该怎么做,然后该按钮将返回标签的名称,Mark。其他标签旁边的其他 Foo 按钮也是如此。

谢谢!

最佳答案

这里是你如何做到的:

代码如下:

from Tkinter import *


class display():
    def __init__(self, controlframe):
        self.controlframe = controlframe
        self.namelist = ["Mike", "Rachael", "Mark", "Miguel", "Peter", "Lyn"]

    def callback(self, index):
        print self.namelist[index]

    def showlist(self):
        self.frame = Frame(self.controlframe, height=1)
        self.frame.pack()
        row = 0
        for index, x in enumerate(self.namelist):
            label = Label(self.frame, text="%s " % x, width=17, anchor="w") #limit the name to 17 characters
            fooButton = Button(self.frame, text="Foo", 
                               command=lambda index=index: self.callback(index))
            label.grid(row=row, column=0, sticky="W")
            fooButton.grid(row=row, column=1)
            row = row + 1


tk = Tk()

D = display(tk)
D.showlist()
tk.mainloop()

注意索引是如何传递给 lambda 的,这就是所谓的“lambda 闭包范围”问题,请参阅 Python lambda closure scoping .

希望对您有所帮助。

关于python - 返回特定字符串的按钮 [Tkinter],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22651079/

相关文章:

python - 对多个项目进行分组

python - 就效率/快速拒绝事物而言,您的 if 语句是否在同一行有什么关系吗?

python - 拼凑 Django View

python - 在 Python 中创建元组范围的最快方法

python - Python 或 MySQL 中是否有一个内置函数可以返回一组 3 个经常出现的单词?

Python-性能-将大型 numpy 数组作为字符串打印到选项卡文件

Python Xlsxwriter 无法正常工作

python - 如何用Tkinter绘制正弦波?

python - Tkinter 新窗口

perl - 限制滚动条长度