python寫一個gui窗口,這個界面有菜單欄,菜單有子菜單,每個子菜單連接一個指定的excel表,在窗口上方添加一個工具欄位,顯示上傳和關閉按鈕,儅用戶選擇任意一個子菜單時將相應讀取excel中所有工作表並生成按鈕顯示在窗口左側竪著排列為防止應工作表過多需要添加滑動條來顯示數據,在右右側創建一個文本框,儅用戶點擊生成的按鈕時,這個文本框就讀取相應excel工作表數據的一列所有數據并在每行數據前面添加一個下拉輸入框,顯示在文本框中,一樣需要滾動條來滾動數據
时间: 2023-12-06 11:05:30 浏览: 21
好的,根据您的要求,我可以给您提供一个Python GUI的示例代码,使用Tkinter库实现菜单栏、工具栏、滚动条、文本框等功能。同时,使用openpyxl库读取Excel文件中的数据。
以下是示例代码:
```python
import tkinter as tk
from tkinter import filedialog
from tkinter import messagebox
from tkinter import ttk
from tkinter.scrolledtext import ScrolledText
from openpyxl import load_workbook
class MyApp:
def __init__(self, master):
self.master = master
master.title("Excel Reader")
# 创建菜单栏
self.menu_bar = tk.Menu(master)
master.config(menu=self.menu_bar)
# 创建文件菜单和子菜单
self.file_menu = tk.Menu(self.menu_bar, tearoff=0)
self.file_menu.add_command(label="Open", command=self.open_file)
self.menu_bar.add_cascade(label="File", menu=self.file_menu)
# 创建工具栏
self.tool_bar = tk.Frame(master)
self.tool_bar.pack(side="top", fill="x")
self.upload_button = tk.Button(self.tool_bar, text="Upload", command=self.upload_file)
self.upload_button.pack(side="left")
self.close_button = tk.Button(self.tool_bar, text="Close", command=self.close_file)
self.close_button.pack(side="left")
# 创建左侧工作表列表和滚动条
self.sheet_frame = tk.Frame(master)
self.sheet_frame.pack(side="left", fill="y")
self.sheet_scrollbar = tk.Scrollbar(self.sheet_frame)
self.sheet_scrollbar.pack(side="right", fill="y")
self.sheet_listbox = tk.Listbox(self.sheet_frame, yscrollcommand=self.sheet_scrollbar.set)
self.sheet_listbox.pack(side="left", fill="y")
self.sheet_scrollbar.config(command=self.sheet_listbox.yview)
# 创建右侧文本框和滚动条
self.text_frame = tk.Frame(master)
self.text_frame.pack(side="left", fill="both", expand=True)
self.text_scrollbar = tk.Scrollbar(self.text_frame)
self.text_scrollbar.pack(side="right", fill="y")
self.text_box = ScrolledText(self.text_frame, yscrollcommand=self.text_scrollbar.set)
self.text_box.pack(side="left", fill="both", expand=True)
self.text_scrollbar.config(command=self.text_box.yview)
# 打开的Excel文件和当前选中的工作表
self.workbook = None
self.current_sheet = None
def open_file(self):
file_path = filedialog.askopenfilename(filetypes=[("Excel Files", "*.xlsx")])
if file_path:
try:
self.workbook = load_workbook(filename=file_path, read_only=True)
self.sheet_listbox.delete(0, tk.END)
for sheet in self.workbook.sheetnames:
self.sheet_listbox.insert(tk.END, sheet)
except:
messagebox.showerror(title="Error", message="Failed to open file!")
def upload_file(self):
if self.current_sheet:
self.text_box.delete("1.0", tk.END)
for row in self.current_sheet.iter_rows(values_only=True):
row_str = ""
for cell in row:
row_str += str(cell) + "\t"
row_str += "\n"
self.text_box.insert(tk.END, row_str)
def close_file(self):
self.workbook = None
self.current_sheet = None
self.sheet_listbox.delete(0, tk.END)
self.text_box.delete("1.0", tk.END)
def select_sheet(self, event):
if self.workbook:
sheet_name = self.sheet_listbox.get(self.sheet_listbox.curselection())
self.current_sheet = self.workbook[sheet_name]
# 清空文本框中的内容
self.text_box.delete("1.0", tk.END)
# 在文本框中添加下拉框和数据
if self.current_sheet:
for cell in self.current_sheet[1]:
options = [""] + [str(cell) for cell in self.current_sheet[1][1:]]
combobox = ttk.Combobox(self.text_box, values=options, state="readonly")
combobox.current(0)
self.text_box.window_create("end", window=combobox)
self.text_box.insert("end", "\t")
for row in self.current_sheet.iter_rows(min_row=2, values_only=True):
for cell in row:
self.text_box.insert(tk.END, str(cell) + "\t")
self.text_box.insert(tk.END, "\n")
root = tk.Tk()
app = MyApp(root)
root.mainloop()
```
该示例代码实现了您的要求,包括菜单栏、工具栏、滚动条、文本框和下拉框等功能。您可以根据需要进行修改和扩展。