将函数绑定到在tkin中的循环中创建的按钮

2024-09-26 17:43:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我编写了一个for循环,根据excel工作簿中的工作表数创建按钮。但是,我有一个很难绑定的函数来打印每张表上的数据。有人能帮忙吗?谢谢。 这是我所做的

wb = xlrd.open_workbook('file_path.xlsx')
        sheetnames = wb.sheet_names()
        num_sheets = len(sheetnames)

        def load_sheet():
        for d in range(0, num_sheets):
            print(sheetnames[d])

        for i in range(0, num_sheets):
            an_sheet = ttk.Button(self, text = "%s" % sheetnames[i], 
                                  command= lambda : load_data)
            an_sheet.grid(row = 1, column = i+1, sticky='w', pady = 10, padx = 10)

Tags: 数据函数inanforloadrangeexcel
1条回答
网友
1楼 · 发布于 2024-09-26 17:43:08

如果在for循环中使用lambda,这是初学者的常见问题,因为初学者没有意识到lambda是延迟绑定。换句话说,当命令参数被设置时,它总是使用最后一个值“i”,而不是“i”的值。在这种情况下,您需要使用functools.partial代替:

from functools import partial
# ...
for i in range(0, num_sheets):
    an_sheet = ttk.Button(self, text = "%s" % sheetnames[i], command=partial(function, i))
    an_sheet.grid(row = 1, column = i+1, sticky='w', pady = 10, padx = 10)

相关问题 更多 >

    热门问题