def load_excel(self, filename,menu_label): self.la=menu_label self.workbook = xl.load_workbook(filename) self.sheet_names = self.workbook.sheetnames # 清空左侧面板 for widget in self.panel_left.winfo_children(): widget.destroy() # 添加工作表按钮 style = ttk.Style() style.configure('my.TButton', font=('Arial', 10)) style.map('my.TButton', background=[('active', '#007FFF')]) for i, sheet_name in enumerate(self.sheet_names): button = ttk.Button(self.panel_left, text=sheet_name, command=lambda name=sheet_name: self.show_sheet(name), style='my.TButton') button.used = False button.grid(row=i, column=0, sticky="ew", padx=2, pady=2) button.bind("<Enter>", lambda event, button=button: button.config(relief="sunken")) button.bind("<Leave>", lambda event, button=button: button.config(relief="raised")) button.bind("<Button-1>", lambda event, button=button: mark_used(button)) def mark_used(button): # 将按钮的标记设置为“已使用” button.used = True # 更改按钮的背景颜色 button.configure(bg="gray") for child in self.panel_left.winfo_children(): # 绑定按钮的点击事件 child.bind("<Button-1>", lambda event, button=child: mark_used(button))這段代碼在點擊按鈕后按鈕未變顔色完整代碼
时间: 2023-12-02 07:03:55 浏览: 140
Read data from the Excel spreadsheet.zip_Spreadsheet::Read_excel
这段代码的作用是从Excel文件中加载工作表,并在左侧面板中添加工作表按钮。当单击按钮时,会在右侧面板中显示选定的工作表。在代码中,使用了lambda表达式来为按钮绑定事件处理程序,以便在单击按钮时调用show_sheet()函数来显示选定的工作表。
对于你的问题,代码中已经在 mark_used()函数中更改了按钮的背景颜色,但是没有立即更新界面。你可以在 mark_used()函数中添加以下代码来更新界面:
button.update()
此外,为了避免重复绑定事件处理程序,你可以将绑定事件处理程序的代码放在添加按钮的循环内部,而不是在循环后面。修改后的代码如下:
```
def load_excel(self, filename, menu_label):
self.la = menu_label
self.workbook = xl.load_workbook(filename)
self.sheet_names = self.workbook.sheetnames
# 清空左侧面板
for widget in self.panel_left.winfo_children():
widget.destroy()
# 添加工作表按钮
style = ttk.Style()
style.configure('my.TButton', font=('Arial', 10))
style.map('my.TButton', background=[('active', '#007FFF')])
for i, sheet_name in enumerate(self.sheet_names):
button = ttk.Button(self.panel_left, text=sheet_name, command=lambda name=sheet_name: self.show_sheet(name), style='my.TButton')
button.used = False
button.grid(row=i, column=0, sticky="ew", padx=2, pady=2)
button.bind("<Enter>", lambda event, button=button: button.config(relief="sunken"))
button.bind("<Leave>", lambda event, button=button: button.config(relief="raised"))
def mark_used(button):
# 将按钮的标记设置为“已使用”
button.used = True
# 更改按钮的背景颜色
button.configure(bg="gray")
# 更新界面
button.update()
# 绑定按钮的点击事件
button.bind("<Button-1>", lambda event, button=button: mark_used(button))
```
这样应该就可以解决按钮颜色未变化的问题了。
阅读全文