2015-11-28 70 views
0

我的应用程序是从数据库填充其字段的表单。我正在编写在这些记录之间导航的函数。 我在写下“下一个记录”功能时遇到问题。Tkinter命令Lambda函数修改变量

在任何给定时间,屏幕上显示的“当前记录”在变量current_record中。

def next_record(current_record): 
    current_index = current_record.index 
    current_record = Competitor(competitors[current_index + 1], current_index + 1) 
    print(current_record.index) 
    populate_form(current_record) 

我的按钮调用这个函数:

action_button_6 = tkinter.Button(group_buttons, text='>>', width=5, 
           command=lambda: next_record(current_record)) 

虽然功能,它的工作,并加载新记录的形式,它不重新分配“current_record”在新的竞争对手如展函数的第三行。

我该如何修改该函数中的变量?

+0

'next_record'中的'current_record'是局部变量,它与'lambda'中的'current_record'无关。如果您在'next_record'中为'current_record'指定了新元素,则会失去与原始记录的联系。 – furas

+0

我知道我已经让自己的生活变得更加困难了,因为他们都是一样的。我的问题是如何修改传递给lambda函数的变量? – Rhys

+0

如果可以的话,您必须更改现有元素中的值 - 例如'current_record.some_variable = competitors [current_index + 1]'和'current_record.index = current_index + 1'。 – furas

回答

0

除非你明确声明您在一个功能修改全局,则默认为是局部变量即使使用相同的名称一个全局变量,从而current_record是一个局部变量。将global current_record添加到next_record函数的开头,并将函数参数重命名为old_record会解决该问题。