创建在tkinter中链接的条目和按钮

时间:2016-01-26 19:57:36

标签: python loops button tkinter tkinter-entry

我正在创建一个GUI,我需要在Tkinter中创建一定数量的条目和按钮。我想在for循环中创建所有这些。作为动作,当我按下任何按钮时,它应该将Entry的值传递给它旁边的按钮的回调。

这是我到目前为止所做的,但它尚未发挥作用。

 n=0
 self.button = []
 self.entFreq = []

 for calVal in calibration:                                                                             
    lbl = Label(self.calFrame)
    lbl.configure(text = "Set amplitud to " + calVal)
    lbl.configure(background=self.bg_App, fg = "white")
    lbl.grid(row=n, column=0)

    self.entFreq.append(Entry(self.calFrame, width=10))
    self.entFreq[n].grid(row=n, column=1, padx = 10)

    #Construction Button send frequency
    self.button.append(Button(self.calFrame, text="Cal", borderwidth=0, relief="groove", command = lambda n=self.entFreq[n].get(): self.get_val(n)))
    self.button[n].configure(bg="#FFF3E0")
    self.button[n].grid(row=n, column=2)
    n+=1

def get_val(self, var):
    print "Got this:", str(var)

我在var函数中只是空白。如何将这两者联系起来?

1 个答案:

答案 0 :(得分:1)

你在你的lambdas中放了太多代码。您只需传入nget_val即可完成其余工作:

self.button.append(Button(..., command=lambda n=n: self.get_val(n)))
...
def get_val(self, n):
    value = self.entFreq[n].get()
    print "Got this:", value

您可能需要考虑为这组标签,条目和按钮定义一个类,因为它们旨在协同工作,而您正在制作多个集合。

例如,您可以传入标签和函数,以便在用户单击按钮时进行调用。例如:

class LabelEntry(object):
    def __init__(self, parent, text, command):
        self.command = command
        self.label = Label(parent, text=text)
        self.entry = Entry(parent)
        self.button = Button(parent, text="Cal", command=self.call_command)

    def call_command(self):
        value = self.entry.get()
        self.command(value)

您可以使用以下内容:

def some_function(self, value):
    print "the value is", value
...
for calVal in calibration:
    le = LabelEntry(frame, 
                    text="Set aplitud to " + calVal, 
                    command=self.some_function)
    le.label.grid(...)
    le.entry.grid(...)
    le.button.grid(...)