在下面的代码中,我需要返回返回的所有值(但是对于每一行分别)但是我已经尝试过lambda并且失败并且我没有得到任何地方。
我还有以前工作的回调定义,当我点击一个框时,它会删除灰色书写,这样我就可以继续输入黑色。
如果可能的话,我想在回调函数末尾添加输入框的值返回,而不是保留'numberwritten'和'callback'。这可能吗?
添加的框数等于self.number_boxes,可以是1到n。
谢谢。
更新代码:
self.numbers = [StringVar() for i in xrange(self.number_boxes) ]
for i in xrange(self.number_boxes):
row = (row_number +add)
column = self.column +i
key = "%d/%d" % (row,column)
self.clicked = ([False] * self.number_boxes)
self.choice_title = Label(self.frame_table, bg=self.mycolour, borderwidth=0, width=10)
self.choice_title.grid(row=1, column=self.column, columnspan=self.number_boxes, sticky="nsew", padx=1, pady=1)
self.choice_titles.append(self.choice_title)
self.box[key] = Entry(self.frame_table,bg='white',borderwidth=0, width=10, justify="center", fg='grey')
self.box[key].grid(row=row_number+add,column=self.column+i, sticky='nsew', padx=1, pady=1)
self.box[key].insert(0, "Value %g" % float(i+1))
self.box[key].bind("<Button-1>", lambda event, key=key, index=i : self.callback(event, key, index))
self.boxes.append(self.box[key])
def callback(self, event, key, index):
for not self.clicked[index]:
self.box[key].delete(0, END)
self.box[key].config(fg='black')
self.clicked[index] = True
print self.box[key].get()
答案 0 :(得分:1)
您至少有几个选择。例如,您可以将条目小部件存储在dict或列表列表中,然后将索引传递给回调。例如:
self.box = {}
for i in xrange(self.number_boxes):
row = row_number+add
column = self.column+i
key = "%d/%d" % (row,column)
...
self.box[key] = Entry(...)
self.box[key].bind("<Button-1>", lambda event, key=key: self.callback(event, key))
重要的是不仅要选择某人在互联网上提供的方法,而且要了解问题以及解决问题的工具。如果你花时间学习lambda的工作原理(或functools.partial)并对基本数据结构(如列表和dicts)有基本的了解,那么这样的问题将不再是绊脚石。
答案 1 :(得分:0)
对于被这一行搞糊涂的python新手(比如我)
self.numbers = [StringVar() for i in xrange(self.number_boxes) ]
google的关键字是'list comprehension',这是一种以格式初始化列表的方法
[表达式 - 条款]
相当于代码段
self.numbers = []
for i in xrange(self.number_boxes)
self.numbers.append(StringVar())
换句话说,它会创建一个初始化为
的列表[ StringVar, StringVar, StringVar, StringVar, ... ]
其值稍后设置。