关于python:Tkinter命令Lambda函数修改变量

Tkinter Command Lambda Function Modify Variable

我的应用程序是一个从数据库填充其字段的表单。我正在编写在这些记录之间导航的函数。我在写"下一张唱片"功能时遇到问题。

在任何给定时间,屏幕上显示的"当前记录"都是一个变量current_record

1
2
3
4
5
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)

我的按钮调用这个函数:

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

尽管函数完成其工作并将新记录加载到表单中,但它不会将"当前记录"重新分配给新竞争对手,如函数第三行所示。

如何在此函数中修改变量?


除非显式声明在函数global中修改的变量,否则即使存在同名的全局变量,它也默认为本地变量,因此current_record是本地变量。将global current_record添加到next_record函数的开头,并将函数参数重命名为old_record可以解决这个问题。