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() # 添加工作表按钮 for i, sheet_name in enumerate(self.sheet_names): button = tk.Button(self.panel_left, text=sheet_name, command=lambda name=sheet_name: self.show_sheet(name)) button.grid(row=i, column=0, sticky="ew", padx=1, pady=1) # 添加一个标记,表示该按钮未被使用 button.used = False # 绑定鼠标进入事件 button.bind("<Enter>", lambda event, button=button: button.configure(bg="lightgray")) # 绑定鼠标离开事件 button.bind("<Leave>", lambda event, button=button: button.configure(bg="SystemButtonFace")) # 绑定按钮的点击事件 button.bind("<Button-1>", lambda event, button=button: mark_used(button)) def mark_used(button): if not button.used: # 将按钮的标记设置为“已使用” button.used = True # 更改按钮的背景颜色 button.configure(bg="green") # 取消按钮的绑定事件 button.unbind("<Button-1>") for child in button.master.winfo_children(): # 绑定按钮的点击事件 child.bind("<Button-1>", lambda event, button=child: mark_used(button))找出這段代碼中點擊按鈕后背景顔色只有點擊那會會顯示,鬆開按鈕后顔色又變回來了,請修改點擊后鼠標移動走了后顔色一直保留為綠色
时间: 2024-02-09 07:13:33 浏览: 59
Read data from the Excel spreadsheet.zip_Spreadsheet::Read_excel
您可以修改 mark_used 函数中的代码,使其如下所示:
```
def mark_used(button):
if not button.used:
# 将按钮的标记设置为“已使用”
button.used = True
# 更改按钮的背景颜色
button.configure(bg="green")
# 取消按钮的绑定事件
button.unbind("<Button-1>")
# 绑定鼠标离开事件,使按钮的背景颜色保持不变
button.bind("<Leave>", lambda event, button=button: button.configure(bg="green"))
for child in button.master.winfo_children():
# 绑定按钮的点击事件
child.bind("<Button-1>", lambda event, button=child: mark_used(button))
```
在修改后的 mark_used 函数中,当按钮被点击时,它的背景颜色将被修改为绿色,表示已经被使用。同时,它将取消按钮的点击事件的绑定,以确保按钮的颜色不会因为用户再次点击而改变。接着,它会绑定按钮的鼠标离开事件,使按钮的背景颜色保持不变。最后,它会遍历按钮的父容器中的所有子控件,并将它们的点击事件都重新绑定到 mark_used 函数,以便它们也能够被正确地标记为“已使用”。
阅读全文