创建左侧面板 self.panel_left = tk.Frame(master, width=150, bg='lightcyan') self.panel_left.pack(side=tk.LEFT, fill=tk.Y) 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) # 更新选中标签文本 # 清空左侧面板 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>") # 绑定鼠标离开事件,使按钮的背景颜色保持不变 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))怎麽在這段函數根據讀取的excel工作表名生成的多個按鈕自動添加滾動條的代碼、
时间: 2024-02-12 18:06:13 浏览: 77
你可以将 self.panel_left 包装在一个 ttk.Scrollbar 控件中,这样当工作表的数量超过屏幕高度时,就可以自动添加滚动条了。具体的代码如下:
```
from tkinter import ttk
# 创建一个垂直滚动条
scrollbar = ttk.Scrollbar(master, orient="vertical", command=self.panel_left.yview)
# 将滚动条绑定到左侧面板
self.panel_left.configure(yscrollcommand=scrollbar.set)
# 将滚动条和左侧面板放在同一个框架中
scrollbar.pack(side=tk.RIGHT, fill=tk.Y)
self.panel_left.pack(side=tk.LEFT, fill=tk.Y)
# 添加工作表按钮
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)
# ...
```
这里我们创建了一个垂直方向的 ttk.Scrollbar 控件,并将其绑定到左侧面板的 yview 方法上,这样当左侧面板的内容超过屏幕高度时,就可以自动添加滚动条了。然后将滚动条和左侧面板放在同一个框架中,最后在添加工作表按钮时,将其添加到左侧面板中即可。
阅读全文