创建在 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 中放入了太多代码。你只需要传入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,因为它们旨在协同工作,而您要制作多组。
例如,您可以传入标签和用户单击按钮时调用的函数。例如:
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(...)
我正在创建一个 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 中放入了太多代码。你只需要传入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,因为它们旨在协同工作,而您要制作多组。
例如,您可以传入标签和用户单击按钮时调用的函数。例如:
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(...)