python寫一個gui窗口,這個界面有菜單欄,菜單有子菜單,每個子菜單連接一個指定的excel表,在窗口上方添加一個工具欄位,顯示上傳和關閉按鈕,儅用戶選擇任意一個子菜單時將相應讀取excel中所有工作表並生成按鈕顯示在窗口左側竪著排列為防止應工作表過多需要添加滑動條來顯示數據,在右右側創建一個文本框,儅用戶點擊生成的按鈕時,這個文本框就讀取相應excel工作表數據的一列所有數據并在每行數據前面添加一個下拉輸入框,顯示在文本框中,一樣需要滾動條來滾動數據
时间: 2023-12-06 15:05:30 浏览: 61
好的,以下是一个使用Python Tkinter模块编写的GUI窗口,满足您的要求。您需要将Excel文件放在与该Python文件相同的目录下,并将Excel文件名和工作表名称更新到代码中。
```python
import tkinter as tk
from tkinter import ttk
from tkinter import scrolledtext
import openpyxl
class ExcelReaderGUI:
def __init__(self, master):
self.master = master
master.title("Excel Reader")
# 创建菜单栏
self.menu_bar = tk.Menu(master)
self.file_menu = tk.Menu(self.menu_bar, tearoff=0)
self.file_menu.add_command(label="Open")
self.file_menu.add_separator()
self.file_menu.add_command(label="Exit", command=self.master.quit)
self.menu_bar.add_cascade(label="File", menu=self.file_menu)
# 创建工具栏
self.toolbar = ttk.Frame(master, padding=(5, 5, 5, 0))
self.toolbar.pack(side="top", fill="x")
self.upload_button = ttk.Button(self.toolbar, text="Upload")
self.upload_button.pack(side="left")
self.close_button = ttk.Button(self.toolbar, text="Close", command=self.master.quit)
self.close_button.pack(side="left", padx=(5, 0))
# 创建左侧的工作表按钮列表
self.sheet_buttons_frame = ttk.Frame(master)
self.sheet_buttons_frame.pack(side="left", fill="y", padx=(5, 0))
self.sheet_buttons_scrollbar = ttk.Scrollbar(self.sheet_buttons_frame, orient="vertical")
self.sheet_buttons_scrollbar.pack(side="right", fill="y")
self.sheet_buttons_canvas = tk.Canvas(self.sheet_buttons_frame, yscrollcommand=self.sheet_buttons_scrollbar.set)
self.sheet_buttons_canvas.pack(side="left", fill="y")
self.sheet_buttons_scrollbar.config(command=self.sheet_buttons_canvas.yview)
self.sheet_buttons_frame_inner = ttk.Frame(self.sheet_buttons_canvas)
self.sheet_buttons_canvas.create_window((0, 0), window=self.sheet_buttons_frame_inner, anchor="nw")
# 创建右侧的数据文本框
self.data_text_frame = ttk.Frame(master)
self.data_text_frame.pack(side="left", fill="both", expand=True, padx=(5, 5), pady=(5, 5))
self.data_text_scrollbar = ttk.Scrollbar(self.data_text_frame, orient="vertical")
self.data_text_scrollbar.pack(side="right", fill="y")
self.data_text = scrolledtext.ScrolledText(self.data_text_frame, wrap="none", yscrollcommand=self.data_text_scrollbar.set)
self.data_text.pack(side="left", fill="both", expand=True)
self.data_text_scrollbar.config(command=self.data_text.yview)
# 读取Excel文件
self.workbook = openpyxl.load_workbook("example.xlsx")
self.sheet_names = self.workbook.sheetnames
# 创建子菜单
self.sub_menu = tk.Menu(self.menu_bar, tearoff=0)
for sheet_name in self.sheet_names:
self.sub_menu.add_command(label=sheet_name, command=lambda sheet_name=sheet_name: self.show_sheet_data(sheet_name))
self.menu_bar.add_cascade(label="Sheets", menu=self.sub_menu)
# 将菜单栏添加到主窗口
master.config(menu=self.menu_bar)
def show_sheet_data(self, sheet_name):
# 清空按钮和文本框
for button in self.sheet_buttons_frame_inner.winfo_children():
button.destroy()
self.data_text.delete("1.0", tk.END)
# 读取工作表数据
sheet = self.workbook[sheet_name]
rows = sheet.iter_rows(values_only=True)
# 在左侧创建工作表按钮
for row_index, row in enumerate(rows):
button_text = row[0] if row[0] else f"Row {row_index + 1}"
button = ttk.Button(self.sheet_buttons_frame_inner, text=button_text, command=lambda row=row: self.show_row_data(row))
button.pack(side="top", fill="x", pady=(0, 5))
# 更新Canvas高度和滚动条
self.sheet_buttons_frame_inner.update_idletasks()
self.sheet_buttons_canvas.config(scrollregion=self.sheet_buttons_canvas.bbox("all"))
def show_row_data(self, row):
# 清空文本框
self.data_text.delete("1.0", tk.END)
# 在文本框中显示行数据
for cell_value in row:
input_box = ttk.Combobox(self.data_text, values=["Option 1", "Option 2", "Option 3"])
input_box.insert(0, cell_value)
self.data_text.window_create(tk.END, window=input_box)
self.data_text.insert(tk.END, " ")
if __name__ == "__main__":
root = tk.Tk()
app = ExcelReaderGUI(root)
root.mainloop()
```
请注意,此代码仅用于演示用途,并且可能需要根据您的具体要求进行修改和优化。
阅读全文