python寫一個gui窗口一個菜單欄,菜單欄名字叫PA,這個PA連接一個指定的excel,儅用戶點擊PA時把這個excel中所有的工作表名打印在窗口中生成按鈕靠窗口左邊竪著放,再在下方生成日志框,儅點擊這些按鈕時可以讀取相應工作表中的一列所有的數據后並根據數據内容在後面添加下拉輸入框將他們放在日志框中再根據數據内容在日志框中自動添加滑動條,
时间: 2023-11-30 09:03:26 浏览: 92
1.第一个窗口.zip
以下是一个实现你所描述功能的Python GUI程序,使用了tkinter和openpyxl库:
```python
import tkinter as tk
from tkinter import ttk
from tkinter import scrolledtext
from tkinter import messagebox
import openpyxl
class App:
def __init__(self):
self.window = tk.Tk()
self.window.title("PA")
self.window.geometry('800x600')
# 创建菜单栏
menubar = tk.Menu(self.window)
self.window.config(menu=menubar)
# 添加菜单项
fileMenu = tk.Menu(menubar, tearoff=0)
menubar.add_cascade(label="PA", menu=fileMenu)
fileMenu.add_command(label="Load Excel", command=self.load_excel)
# 工作表名按钮列表
self.sheet_btns = []
# 创建工作表名按钮区域
self.sheet_btn_frame = tk.Frame(self.window, width=200, bg="grey")
self.sheet_btn_frame.pack(side=tk.LEFT, fill=tk.Y)
# 创建日志框
self.log = scrolledtext.ScrolledText(self.window, width=100, height=20)
self.log.pack(side=tk.BOTTOM, fill=tk.BOTH)
self.window.mainloop()
def load_excel(self):
# 打开指定的Excel文件
file_path = tk.filedialog.askopenfilename(filetypes=[('Excel Files', '*.xlsx')])
if file_path:
wb = openpyxl.load_workbook(file_path)
# 清空工作表名按钮区域和工作表名按钮列表
for btn in self.sheet_btns:
btn.destroy()
self.sheet_btns = []
# 遍历工作表并创建按钮
for sheet_name in wb.sheetnames:
btn = ttk.Button(self.sheet_btn_frame, text=sheet_name, command=lambda name=sheet_name:self.load_sheet(name, wb))
btn.pack(side=tk.TOP, fill=tk.X)
self.sheet_btns.append(btn)
def load_sheet(self, sheet_name, wb):
try:
# 获取指定工作表的所有行
ws = wb[sheet_name]
rows = list(ws.iter_rows(values_only=True))
if not rows:
raise Exception("No data in sheet")
# 获取第一行的列名
col_names = rows[0]
if not col_names:
raise Exception("No column names")
# 计算滑动条的初始值和步长
min_val = min([min(row[1:]) for row in rows[1:]])
max_val = max([max(row[1:]) for row in rows[1:]])
step = (max_val - min_val) / 100
# 清空日志框
self.log.delete('1.0', tk.END)
# 创建下拉框和滑动条,并将其添加到日志框中
for col_idx, col_name in enumerate(col_names[1:], start=1):
combo_box = ttk.Combobox(self.log, values=rows[1:, col_idx], state="readonly")
combo_box.pack(side=tk.LEFT, padx=5, pady=5)
scrollbar = tk.Scale(self.log, from_=min_val, to=max_val, resolution=step, orient=tk.HORIZONTAL)
scrollbar.pack(side=tk.LEFT, fill=tk.X, expand=True, padx=5, pady=5)
self.log.insert(tk.END, f"{col_name}:\n", "bold")
self.log.window_create(tk.END, window=combo_box)
self.log.window_create(tk.END, window=scrollbar)
self.log.insert(tk.END, "\n")
except Exception as e:
messagebox.showerror("Error", str(e))
if __name__ == '__main__':
app = App()
```
运行该程序后,点击菜单栏中的“Load Excel”菜单项,可以选择一个Excel文件。选定文件后,程序会将文件中所有工作表的名称创建为一个个按钮,放置在窗口的左侧。当用户点击其中一个工作表名按钮时,程序会读取该工作表的第一行作为列名,然后将每一列的数据分别创建为一个下拉框和一个滑动条,放置在窗口的底部日志框中。用户可以在下拉框中选择某一行的数据,也可以通过滑动条调整该行的值。在日志框中可以看到每一列的名称,以及对应的下拉框和滑动条。
阅读全文