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.used = False button.grid(row=i, column=0, sticky="ew", padx=1, pady=1) # 绑定鼠标进入事件 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="gray") for child in self.panel_left.winfo_children(): # 绑定按钮的点击事件 child.bind("<Button-1>", lambda event, button=child: mark_used(button))修改這段代碼中點擊事件,儅用戶點擊這個按鈕后將相應按鈕的顔色修改為綠色,但實際上這個按鈕沒反應
时间: 2024-02-09 08:13:22 浏览: 15
您可以尝试修改 mark_used 函数中的代码,使其如下所示:
```
def mark_used(button):
if not button.used:
# 将按钮的标记设置为“已使用”
button.used = True
# 更改按钮的背景颜色
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 函数,以便它们也能够被正确地标记为“已使用”。
相关问题
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)給這段代碼后面添加注解
这段代码定义了一个名为 "load_excel" 的方法,它接受三个参数:文件名、菜单标签和选定标签的文本。这个方法的作用是加载 Excel 文件,并将 Excel 文件中的数据显示在界面上。
首先,代码使用 "winfo_children()" 方法清空了 "sheet_frame" 和 "unique_listbox" 中的所有子部件。然后,代码设置了 "la" 属性为 "menu_label" 参数,"workbook" 属性为使用 "xl.load_workbook()" 方法加载的 Excel 文件,"sheet_names" 属性为工作簿中所有工作表的名称列表。
最后,代码将 "selected_label" 的文本属性设置为 "selected_label_text" 参数。
该方法没有返回值,但它对界面进行了更新。
def load_excel(self, filename, menu_label, selected_label_text): 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) # 更新选中标签文本 data4 = self.la if not data4.endswith('.xlsx'): data4 += '.xlsx' # 拼接完整的文件路径 filepath = os.path.join(r'\pcq-smt-ftp01\smt$\CQ SMT-單板測試課\2.生產組\點檢表\點檢歷史資料', data4) print(filepath) # 清空左侧面板 for widget in self.sheet_frame.winfo_children(): widget.destroy() # 清空右下側面板 for widget in self.unique_listbox.winfo_children(): widget.destroy() # 在右下側添加文本標簽 for i, sheet_name in enumerate(self.sheet_names): label = tk.Label(self.unique_listbox, text=sheet_name) # 打开文件并筛选当天日期 workbook = xl.load_workbook(filepath) sheet = workbook[sheet_name] today = datetime.datetime.now().strftime('%Y/%m/%d') filtered_rows = [] for row in sheet.iter_rows(min_row=3): if row[2].value == today: filtered_rows.append(row) # 比对文件中的第9列出现的文本内容并在标签后面添加文本 for row in filtered_rows: if row[8].value == sheet_name: label.config(text=f"{sheet_name} - 已點檢") label.grid(row=i // 5, column=i % 5, sticky="ew", padx=1, pady=1)這代碼怎麽添加
你可以在 `load_excel` 函数中添加一个参数 `data_path`,用于指定数据文件所在的路径。然后在拼接文件路径时,使用该参数代替写死的路径。修改后的代码如下:
```python
def load_excel(self, filename, menu_label, selected_label_text, data_path):
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) # 更新选中标签文本
if not filename.endswith('.xlsx'):
filename += '.xlsx'
# 拼接完整的文件路径
filepath = os.path.join(data_path, filename)
print(filepath)
# 清空左侧面板
for widget in self.sheet_frame.winfo_children():
widget.destroy()
# 清空右下側面板
for widget in self.unique_listbox.winfo_children():
widget.destroy()
# 在右下側添加文本標簽
for i, sheet_name in enumerate(self.sheet_names):
label = tk.Label(self.unique_listbox, text=sheet_name)
# 打开文件并筛选当天日期
workbook = xl.load_workbook(filepath)
sheet = workbook[sheet_name]
today = datetime.datetime.now().strftime('%Y/%m/%d')
filtered_rows = []
for row in sheet.iter_rows(min_row=3):
if row[2].value == today:
filtered_rows.append(row)
# 比对文件中的第9列出现的文本内容并在标签后面添加文本
for row in filtered_rows:
if row[8].value == sheet_name:
label.config(text=f"{sheet_name} - 已點檢")
label.grid(row=i // 5, column=i % 5, sticky="ew", padx=1, pady=1)
```
使用时,调用 `load_excel` 函数时,需要传入新的参数 `data_path`,用于指定数据文件所在的路径。例如:
```python
data_path = r'\pcq-smt-ftp01\smt$\CQ SMT-單板測試課\2.生產組\點檢表\點檢歷史資料'
filename = 'PA綫.xlsx'
menu_label = 'PA綫'
selected_label_text = '已選擇:PA綫'
load_excel(filename, menu_label, selected_label_text, data_path)
```