Tkinter为动态创建的小部件中的条目分配按钮

时间:2016-12-06 17:42:34

标签: python-2.7 tkinter

如何在动态创建的小部件中按相应的按钮来访问条目内容? 以下是我迄今为止提出的最佳方案。谢谢你的帮助。

from Tkinter import *

class App(object):
    def __init__(self, master):
        self.master = master
        self.mf = Frame(self.master)
        self.l = ["white", "red", "blue", "brown"]
        self.font = ("Arial", 30)
        self.c, self.r = 1, 0
        self.cc, self.rr = 0, 0
        self.bel = []

        for c in self.l:
            action = self.print_entry
            self.e = Entry(self.mf, bg=c, width=10, font=self.font)
            self.e.grid(row=self.r, column=self.c)

            self.b = Button(self.mf, bg=c, text=c, font=self.font)
            self.b.grid(row=self.rr, column=self.cc)
            self.b.config(command=action)
            self.bel.append((self.b, self.e))
            self.rr += 1
            self.r += 1

        self.mf.pack()

    def print_entry(self): # this function prints the content of the entry
        pass

def main():
    root = Tk()
    display = App(root)
    root.mainloop()
if __name__=="__main__":
    main()

1 个答案:

答案 0 :(得分:1)

您可以使用lambda或functools.partial将对条目窗口小部件的引用传递给命令。例如:

self.b.config(command= lambda entry=self.e: action(entry))
...
def print_entry(self, entry): 
    print("the entry is '%s'" % entry.get())

顺便说一句,使用self.bself.e是没有意义的,因为这些变量只能保存对最后一个按钮和最后一个条目的引用。您应该使用局部变量,和/或将值附加到列表中。