python寫一個gui窗口一個菜單欄,菜單欄名字叫PA,這個PA連接一個excel,儅用戶點擊PA時把這個excel中所有的工作表名打印在窗口中生成按鈕靠窗口左邊竪著放,再在下方生成日志框,儅點擊這些按鈕時可以讀取相應工作表中的一列所有的數據后並根據數據内容在後面添加下拉輸入框將他們放在日志框中再根據數據内容在日志框中自動添加滑動條,
时间: 2023-11-30 12:03:26 浏览: 37
下面是一个简单的实现,其中使用了openpyxl库来读取Excel文件,Tkinter库来创建GUI窗口和组件:
```python
import tkinter as tk
from tkinter import ttk
from tkinter import scrolledtext
from tkinter import filedialog
import openpyxl
class ExcelReader:
def __init__(self, file_path):
self.workbook = openpyxl.load_workbook(file_path)
def get_sheet_names(self):
return self.workbook.sheetnames
def get_data(self, sheet_name):
sheet = self.workbook[sheet_name]
data = []
for row in sheet.iter_rows(min_row=2, values_only=True):
data.append(row)
return data
class App:
def __init__(self, master):
self.master = master
master.title("PA")
master.geometry("600x400")
# create menu
menubar = tk.Menu(master)
file_menu = tk.Menu(menubar, tearoff=0)
file_menu.add_command(label="Open", command=self.open_file)
menubar.add_cascade(label="PA", menu=file_menu)
master.config(menu=menubar)
# create buttons frame
self.buttons_frame = tk.Frame(master)
self.buttons_frame.pack(side="left", fill="y")
# create log frame
self.log_frame = tk.Frame(master)
self.log_frame.pack(fill="both", expand=True)
def open_file(self):
file_path = filedialog.askopenfilename(filetypes=[("Excel files", "*.xlsx")])
if file_path:
self.show_buttons(file_path)
def show_buttons(self, file_path):
# clear existing buttons
for button in self.buttons_frame.winfo_children():
button.destroy()
# create buttons for each sheet
excel_reader = ExcelReader(file_path)
sheet_names = excel_reader.get_sheet_names()
for sheet_name in sheet_names:
button = ttk.Button(self.buttons_frame, text=sheet_name, command=lambda sheet_name=sheet_name: self.show_data(sheet_name, excel_reader))
button.pack(side="top", pady=5)
def show_data(self, sheet_name, excel_reader):
# clear log frame
for widget in self.log_frame.winfo_children():
widget.destroy()
# get data from selected sheet
data = excel_reader.get_data(sheet_name)
# create dropdowns for each column
for i, column in enumerate(data[0]):
options = list(set([row[i] for row in data]))
if len(options) > 1:
label = ttk.Label(self.log_frame, text=column)
label.grid(row=i, column=0, padx=5, pady=5)
dropdown = ttk.Combobox(self.log_frame, values=options)
dropdown.grid(row=i, column=1, padx=5, pady=5)
scrollbar = tk.Scrollbar(self.log_frame, orient="horizontal", command=dropdown.xview)
scrollbar.grid(row=i, column=2, sticky="ew")
dropdown.config(xscrollcommand=scrollbar.set)
if __name__ == "__main__":
root = tk.Tk()
app = App(root)
root.mainloop()
```
运行这段代码,会弹出一个GUI窗口,点击菜单栏的“PA”并选择一个Excel文件后,会在窗口左侧生成一个竖直排列的按钮列表,每个按钮对应Excel文件中的一个工作表。当用户点击某个按钮时,会在窗口右侧生成一列下拉輸入框,每个下拉輸入框对应选中工作表的一列数据。同时,根据数据内容,会自动添加水平滚动条以便用户查看较宽的数据值。所有的日志信息都会显示在窗口底部的滚动文本框中。