2017-03-21 130 views
0

我寫了一個for循環來根據Excel工作簿中的工作表數量創建按鈕。但是,我很難在每張紙上打印數據。誰能幫忙?謝謝。 這裏是我做了什麼將函數綁定到在tkinter循環中創建的按鈕

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) 
+0

什麼是您想要綁定的功能? – Novel

+0

抱歉忘了粘貼那段代碼..編輯問題asaf –

+0

問題已經更新 –

回答

1

這是一個常見的初學者的問題,如果你正在使用的λ在for循環中,因爲初學者沒有意識到拉姆達後期綁定。換句話說,當命令參數被設置時,它總是使用「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) 
+0

非常感謝,functools是否帶有python或我必須安裝它。 –

+0

它是默認安裝的一部分。 – Novel