python寫一個gui窗口,這個界面有菜單欄,菜單有子菜單,每個子菜單連接一個指定的excel表,在窗口上方添加一個工具欄位,顯示上傳和關閉按鈕,儅用戶選擇任意一個子菜單時將相應讀取excel中所有工作表並生成按鈕顯示在窗口左側竪著排列為防止應工作表過多需要添加滑動條來顯示數據,在右右側創建一個文本框,儅用戶點擊生成的按鈕時,這個文本框就讀取相應excel工作表數據的一列所有數據并在每行數據前面添加一個下拉輸入框,顯示在文本框中,一樣需要滾動條來滾動數據
时间: 2023-12-06 10:05:44 浏览: 68
好的,以下是一个实现你要求的 Python GUI 窗口的示例代码:
```python
import tkinter as tk
import tkinter.filedialog as fd
import openpyxl
class ExcelReader:
def __init__(self):
self.workbook = None
def open_excel(self, file_path):
self.workbook = openpyxl.load_workbook(file_path)
def get_worksheets(self):
return self.workbook.sheetnames
def get_row_data(self, worksheet_name):
worksheet = self.workbook[worksheet_name]
rows = []
for row in worksheet.iter_rows(min_row=1, values_only=True):
rows.append(row)
return rows
class App:
def __init__(self, master):
self.master = master
self.master.title("Excel Reader")
self.excel_reader = ExcelReader()
# 创建菜单栏
menu_bar = tk.Menu(self.master)
# 创建文件菜单
file_menu = tk.Menu(menu_bar, tearoff=0)
file_menu.add_command(label="打开", command=self.open_file)
file_menu.add_command(label="退出", command=self.quit_app)
menu_bar.add_cascade(label="文件", menu=file_menu)
# 创建工具栏
toolbar = tk.Frame(self.master, bd=1, relief=tk.RAISED)
upload_button = tk.Button(toolbar, text="上传", command=self.open_file)
upload_button.pack(side=tk.LEFT, padx=2, pady=2)
close_button = tk.Button(toolbar, text="关闭", command=self.quit_app)
close_button.pack(side=tk.LEFT, padx=2, pady=2)
toolbar.pack(side=tk.TOP, fill=tk.X)
# 创建滚动区域
scroll_area = tk.Frame(self.master)
self.buttons_frame = tk.Frame(scroll_area)
scroll_bar = tk.Scrollbar(scroll_area, orient=tk.VERTICAL)
scroll_bar.pack(side=tk.RIGHT, fill=tk.Y)
scroll_bar.config(command=self.buttons_frame.yview)
self.buttons_frame.config(yscrollcommand=scroll_bar.set)
self.buttons_frame.pack(side=tk.LEFT, fill=tk.BOTH, expand=True)
scroll_area.pack(side=tk.LEFT, fill=tk.BOTH, expand=True)
# 创建文本框
self.text_box = tk.Text(self.master)
self.text_box.pack(side=tk.RIGHT, fill=tk.BOTH, expand=True)
# 初始化窗口
self.master.config(menu=menu_bar, width=800, height=600)
def open_file(self):
file_path = fd.askopenfilename()
if file_path:
self.excel_reader.open_excel(file_path)
self.generate_worksheet_buttons()
def quit_app(self):
self.master.quit()
def generate_worksheet_buttons(self):
# 删除已有按钮
for child in self.buttons_frame.winfo_children():
child.destroy()
# 生成新按钮
worksheets = self.excel_reader.get_worksheets()
for worksheet_name in worksheets:
button = tk.Button(self.buttons_frame, text=worksheet_name,
command=lambda name=worksheet_name: self.show_worksheet_data(name))
button.pack(side=tk.TOP, fill=tk.X)
def show_worksheet_data(self, worksheet_name):
rows = self.excel_reader.get_row_data(worksheet_name)
self.text_box.delete(1.0, tk.END)
for row in rows:
dropdown = tk.OptionMenu(self.text_box, tk.StringVar(value=row[0]), *row)
self.text_box.window_create(tk.INSERT, window=dropdown)
self.text_box.insert(tk.INSERT, "\n")
if __name__ == "__main__":
root = tk.Tk()
app = App(root)
root.mainloop()
```
这个窗口有菜单栏和工具栏,菜单栏包含文件菜单,工具栏包含上传和关闭按钮。当用户点击文件菜单中的“打开”命令时,会打开一个文件对话框,让用户选择要读取的 Excel 文件。选择文件后,程序会读取文件中的所有工作表,并在窗口左侧生成一个按钮列表,每个按钮与一个工作表对应。当用户点击这些按钮中的任意一个时,程序会读取相应的工作表数据,并在窗口右侧的文本框中显示,每个数据行都有一个下拉框选项。如果工作表数据比较多,用户可以使用文本框左侧的滚动条来滚动数据。如果窗口太小,用户还可以调整窗口大小。
阅读全文