Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将函数绑定到tkinter中循环中创建的按钮_Python_Excel_Tkinter - Fatal编程技术网

Python 将函数绑定到tkinter中循环中创建的按钮

Python 将函数绑定到tkinter中循环中创建的按钮,python,excel,tkinter,Python,Excel,Tkinter,我编写了一个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, n

我编写了一个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)

如果在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)

您要绑定的函数是什么?很抱歉,忘记粘贴这段代码了。。将问题编辑为已更新的问题非常感谢,functools是随python提供的还是我必须安装它。这是默认安装的一部分。