1

在下面的代码中,我需要返回所有返回的值(但分别针对每一行),但我尝试了 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()
4

2 回答 2

1

你至少有几个选择。一方面,您可以将条目小部件存储在字典或列表列表中,然后将索引传递给回调。例如:

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)并对列表和字典等基本数据结构有基本的了解,这样的问题将不再是绊脚石。

于 2012-07-11T12:44:16.360 回答
0

对于对此线感到困惑的python新手(像我一样)

self.numbers = [StringVar() for i in xrange(self.number_boxes) ] 

google 的关键字是“列表理解”,这是一种以格式初始化列表的方法

[ 表达式 for 子句 ]

这相当于片段

self.numbers = []
for i in xrange(self.number_boxes)
    self.numbers.append(StringVar())

换句话说,它创建了一个初始化为的列表

[ StringVar, StringVar, StringVar, StringVar, ... ]

其值稍后设置。

于 2013-01-06T12:21:46.683 回答