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

Creating entry and buttons linked in tkinter

我正在创建一个 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 函数中一片空白。如何link那两个?

您在 lambda 中放入了太多代码。你只需要传入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,因为它们旨在协同工作,而您要制作多组。

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

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(...)