我已經能夠使用此代碼循環按鈕
for i in range(0, num_sheets):
an_sheet = ttk.Button(self, text = "%s" % sh_names[i], command = partial(load_sheets))
an_sheet.grid(row = 1, column = i+1, sticky='w', pady = 10, padx = 10)
現在這些按鈕已被基於片材的在Excel工作表的數量產生,以產生在Tkinter的按鈕和也已分配他們代表的工作表名稱。但是,有一個功能可以打印每張表單的內容。
def load_sheets():
for i,sheetname in enumerate(sh_names) :
xl_sheet = wb.sheet_by_name(sh_names[i])
print()
print(sheetname)
row = xl_sheet.row(0)
for idx, cell_obj in enumerate(row):
cell_type_str = ctype_text.get(cell_obj.ctype, 'unknown type')
row = xl_sheet.nrows
for col_idx in range(0, xl_sheet.ncols):
print ('Column: %s' % col_idx)
for row_idx in range(0, row):
cell_obj = xl_sheet.cell(row_idx, col_idx)
print ('Row: [%s] cell_obj: [%s]' % (row_idx, cell_obj))
現在的挑戰是如何將函數綁定到按鈕上,以便當它被點擊時打印出它自己的內容。例如,當點擊一個名爲'工作表1'的按鈕時,應打印工作表1的內容。
這裏是代碼的完整結構。
class MainMenu(tk.Frame):
def __init__(self, parent, controller):
tk.Frame.__init__(self, parent)
fname = join(dirname(dirname(abspath('C:/Users/qanda/OneDrive/Documents/Python Scripts/PEN'))), 'Python Scripts/PEN', 'Book1.xlsx')
wb = xlrd.open_workbook(fname)
sh_names = wb.sheet_names()
num_sheets = len(sh_names)
def load_sheets():
for i,sheetname in enumerate(sh_names) :
xl_sheet = wb.sheet_by_name(sh_names[i])
print()
print(sheetname)
row = xl_sheet.row(0)
for idx, cell_obj in enumerate(row):
cell_type_str = ctype_text.get(cell_obj.ctype, 'unknown type')
row = xl_sheet.nrows
for col_idx in range(0, xl_sheet.ncols):
print ('Column: %s' % col_idx)
for row_idx in range(0, row):
cell_obj = xl_sheet.cell(row_idx, col_idx)
print ('Row: [%s] cell_obj: [%s]' % (row_idx, cell_obj))
for i in range(0, num_sheets):
an_sheet = ttk.Button(self, text = "%s" % sh_names[i], command = partial(load_sheets))
an_sheet.grid(row = 1, column = i+1, sticky='w', pady = 10, padx = 10)
什麼是functools.partial?這聽起來很有用 –
@JoshuaNixon:我以爲你知道,因爲你發佈的代碼正在使用它。至少,我假設當你在代碼中使用'partial'時,即使你錯誤地使用了'functools.partial',你也會使用'functools.partial'。如果你不知道它做了什麼,請查看它。 –
@BryanOakly詞部分不在我的代碼? –