def load_excel(self, filename, menu_label, selected_label_text): for widget in self.sheet_frame.winfo_children(): widget.destroy() for widget in self.unique_listbox.winfo_children(): widget.destroy() self.la = menu_label self.workbook = xl.load_workbook(filename) self.sheet_names = sorted(self.workbook.sheetnames) self.selected_label.config(text=selected_label_text) now = datetime.datetime.now().time() # 添加工作表按钮 for i, sheet_name in enumerate(self.sheet_names): # 枚举工作表列表中的每个工作表 if now >= datetime.time(8, 0, 0) and now <= datetime.time(19, 0, 0): if datetime.datetime.today().weekday() == 2: # 如果当前日期是星期3 # 添加一个按钮,按钮文本为工作表名称,点击按钮时调用self.show_sheet()方法显示相应的工作表 self.button = tk.Button(self.sheet_frame, text=sheet_name, command=lambda name=sheet_name: self.show_sheet(name)) self.button.grid(row=i, column=0, sticky="ew", padx=1, pady=1) else: # 如果当前日期不是星期3 if not sheet_name.startswith("設備-"): # 并且工作表名称不以"設備-"开头 # 则添加一个按钮,按钮文本为工作表名称,点击按钮时调用self.show_sheet()方法显示相应的工作表 self.button = tk.Button(self.sheet_frame, text=sheet_name, command=lambda name=sheet_name: self.show_sheet(name)) self.button.grid(row=i, column=0, sticky="ew", padx=1, pady=1) else: if not sheet_name.startswith("設備-"): # 并且工作表名称不以"設備-"开头 # 则添加一个按钮,按钮文本为工作表名称,点击按钮时调用self.show_sheet()方法显示相应的工作表 self.button = tk.Button(self.sheet_frame, text=sheet_name, command=lambda name=sheet_name: self.show_sheet(name)) self.button.grid(row=i, column=0, sticky="ew", padx=1, pady=1) # 添加一个标记,表示该按钮未被使用 self.button.used = False # 绑定鼠标进入事件 self.button.bind("<Enter>", lambda event, button=self.button: button.configure(bg="lightgray")) # 绑定鼠标离开事件 self.button.bind("<Leave>", lambda event, button=self.button: button.configure(bg="SystemButtonFace")) # 绑定按钮的点击事件 self.button.bind("<Button-1>", lambda event, button=self.button: self.mark_used(button)) # 监听Canvas的大小变化,调整滚动条 self.sheet_frame.bind('<Enter>', lambda e: self.canvas.config(scrollregion=self.canvas.bbox("all")))
时间: 2024-04-13 20:30:01 浏览: 19
要在用户选择某个按钮时根据特定条件改变按钮的颜色,您可以以下修改后的代码:
```python
def load_excel(self, filename, menu_label, selected_label_text):
for widget in self.sheet_frame.winfo_children():
widget.destroy()
for widget in self.unique_listbox.winfo_children():
widget.destroy()
self.la = menu_label
self.workbook = xl.load_workbook(filename)
self.sheet_names = sorted(self.workbook.sheetnames)
self.selected_label.config(text=selected_label_text)
now = datetime.datetime.now().time()
# 添加工作表按钮
for i, sheet_name in enumerate(self.sheet_names): # 枚举工作表列表中的每个工作表
if now >= datetime.time(8, 0, 0) and now <= datetime.time(19, 0, 0):
if datetime.datetime.today().weekday() == 2: # 如果当前日期是星期3
# 添加一个按钮,按钮文本为工作表名称,点击按钮时调用self.show_sheet()方法显示相应的工作表
self.button = tk.Button(self.sheet_frame, text=sheet_name,
command=lambda name=sheet_name: self.show_sheet(name))
self.button.grid(row=i, column=0, sticky="ew", padx=1, pady=1)
else: # 如果当前日期不是星期3
if not sheet_name.startswith("設備-"): # 并且工作表名称不以"設備-"开头
# 则添加一个按钮,按钮文本为工作表名称,点击按钮时调用self.show_sheet()方法显示相应的工作表
self.button = tk.Button(self.sheet_frame, text=sheet_name,
command=lambda name=sheet_name: self.show_sheet(name))
self.button.grid(row=i, column=0, sticky="ew", padx=1, pady=1)
else:
if not sheet_name.startswith("設備-"): # 并且工作表名称不以"設備-"开头
# 则添加一个按钮,按钮文本为工作表名称,点击按钮时调用self.show_sheet()方法显示相应的工作表
self.button = tk.Button(self.sheet_frame, text=sheet_name,
command=lambda name=sheet_name: self.show_sheet(name))
self.button.grid(row=i, column=0, sticky="ew", padx=1, pady=1)
# 添加一个标记,表示该按钮未被使用
self.button.used = False
# 绑定鼠标进入事件
self.button.bind("<Enter>", lambda event, button=self.button: button.configure(bg="lightgray"))
# 绑定鼠标离开事件
self.button.bind("<Leave>", lambda event, button=self.button: button.configure(bg="SystemButtonFace"))
# 绑定按钮的点击事件
self.button.bind("<Button-1>", lambda event, button=self.button: self.mark_used(button))
# 监听Canvas的大小变化,调整滚动条
self.sheet_frame.bind('<Enter>', lambda e: self.canvas.config(scrollregion=self.canvas.bbox("all")))
def mark_used(self, button):
# 在这里添加您的特定条件判断逻辑
if button.used:
button.configure(bg="green")
else:
button.configure(bg="red")
```
在这个例子中,我们添加了一个`mark_used`方法,用于根据特定条件来判断是否改变按钮的颜色。在`mark_used`方法中,您可以根据实际的条件判断逻辑来决定是否将按钮的背景色设置为绿色(或其他颜色)。
请确保在适当的位置调用`mark_used`方法,以便根据特定条件来改变按钮的颜色。
希望这个修改满足了您的需求。如果还有其他问题,请随时提问。