我正在创建一个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函数中只是空白。如何将这两者联系起来?
答案 0 :(得分:1)
你在你的lambdas中放了太多代码。您只需传入n
,get_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(...)