python寫一個gui窗口一個菜單欄,菜單欄名字叫PA,這個PA連接一個excel,儅用戶點擊PA時把這個excel中所有的工作表名打印在窗口中生成按鈕靠窗口左邊竪著放,再在下方生成日志框,儅點擊這些按鈕時可以讀取相應工作表中的一列所有的數據后並根據數據内容在後面添加下拉輸入框將他們放在日志框中再根據數據内容在日志框中自動添加滑動條,
时间: 2023-11-30 19:03:26 浏览: 75
以下是基于Python tkinter库的GUI程序实现:
```python
import tkinter as tk
import openpyxl
from tkinter import ttk
from tkinter import messagebox
class App:
def __init__(self, master):
self.master = master
self.master.title("PA")
# 创建菜单栏
menubar = tk.Menu(self.master)
self.master.config(menu=menubar)
self.file_menu = tk.Menu(menubar, tearoff=0)
self.file_menu.add_command(label="Open Excel", command=self.open_excel)
menubar.add_cascade(label="PA", menu=self.file_menu)
# 创建工作表按钮
self.sheet_buttons = []
self.sheet_frame = tk.Frame(self.master)
self.sheet_frame.pack(side=tk.LEFT, fill=tk.Y)
# 创建日志框
self.log_frame = tk.Frame(self.master)
self.log_frame.pack(side=tk.TOP, fill=tk.BOTH, expand=True)
self.log_scrollbar = tk.Scrollbar(self.log_frame)
self.log_scrollbar.pack(side=tk.RIGHT, fill=tk.Y)
self.log_text = tk.Text(self.log_frame, yscrollcommand=self.log_scrollbar.set)
self.log_text.pack(side=tk.TOP, fill=tk.BOTH, expand=True)
self.log_scrollbar.config(command=self.log_text.yview)
def open_excel(self):
# 打开Excel文件
try:
self.filename = tk.filedialog.askopenfilename(filetypes=[("Excel files", "*.xlsx")])
self.wb = openpyxl.load_workbook(filename=self.filename, read_only=True)
except:
messagebox.showerror("Error", "Failed to open Excel file.")
return
# 清空原有工作表按钮
for button in self.sheet_buttons:
button.destroy()
self.sheet_buttons.clear()
# 创建工作表按钮
for sheetname in self.wb.sheetnames:
button = ttk.Button(self.sheet_frame, text=sheetname, command=lambda name=sheetname: self.read_data(name))
button.pack(side=tk.TOP, pady=5)
self.sheet_buttons.append(button)
def read_data(self, sheetname):
# 清空日志框
self.log_text.delete("1.0", tk.END)
# 读取工作表数据
sheet = self.wb[sheetname]
rows = sheet.iter_rows(min_row=2, max_row=sheet.max_row, values_only=True)
headers = next(sheet.iter_rows(min_row=1, max_row=1, values_only=True))
# 创建下拉框和滑动条
comboboxes = []
scales = []
for header in headers:
combobox = ttk.Combobox(self.log_text, values=list(set([row[headers.index(header)] for row in rows])))
combobox.current(0)
combobox.pack(side=tk.TOP, pady=5)
comboboxes.append(combobox)
scale = ttk.Scale(self.log_text, from_=0, to=100, orient=tk.HORIZONTAL)
scale.pack(side=tk.TOP, pady=5)
scales.append(scale)
# 添加数据到日志框
rows = sheet.iter_rows(min_row=2, max_row=sheet.max_row, values_only=True)
for row in rows:
if row[headers.index(headers[0])] == comboboxes[0].get() and row[headers.index(headers[1])] == comboboxes[1].get():
data_str = ""
for i in range(len(row)):
data_str += headers[i] + ": " + str(row[i]) + ", "
self.log_text.insert(tk.END, data_str[:-2] + "\n")
for i in range(len(scales)):
scales[i].set(row[i+2])
```
该程序通过创建菜单栏,在用户点击菜单栏中的“Open Excel”后打开Excel文件,并将Excel文件中的所有工作表名生成按钮放在窗口左侧。用户点击工作表按钮后,程序将读取相应工作表中的数据,并根据每一列数据生成下拉框和滑动条,并将数据添加在日志框中。
阅读全文