python寫一個gui窗口一個菜單欄,菜單欄名字叫PA,這個PA連接一個excel,儅用戶點擊PA時把這個excel中所有的工作表名打印在窗口中生成按鈕靠窗口左邊竪著放,再在下方生成日志框,儅點擊這些按鈕時可以讀取相應工作表中的一列所有的數據后並根據數據内容在後面添加下拉輸入框將他們放在日志框中再根據數據内容在日志框中自動添加滑動條,
时间: 2023-11-30 10:03:26 浏览: 73
以下是一个实现上述功能的Python GUI程序:
```python
import tkinter as tk
import pandas as pd
class App:
def __init__(self, master):
self.master = master
self.master.title("PA")
self.menu_bar = tk.Menu(self.master)
self.master.config(menu=self.menu_bar)
self.file_menu = tk.Menu(self.menu_bar, tearoff=False)
self.menu_bar.add_cascade(label="PA", menu=self.file_menu)
self.file_menu.add_command(label="Open Excel", command=self.open_excel)
self.button_frame = tk.Frame(self.master)
self.button_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)
def open_excel(self):
file_path = tk.filedialog.askopenfilename(filetypes=[('Excel files', '*.xlsx')])
if file_path:
self.workbook = pd.read_excel(file_path, sheet_name=None)
self.create_buttons()
def create_buttons(self):
for i, sheet_name in enumerate(self.workbook.keys()):
button = tk.Button(self.button_frame, text=sheet_name, command=lambda sheet_name=sheet_name: self.read_data(sheet_name))
button.pack(side=tk.TOP, padx=5, pady=5)
def read_data(self, sheet_name):
df = self.workbook[sheet_name]
row = df.iloc[0]
for i, value in enumerate(row):
if pd.isna(value):
continue
label = tk.Label(self.log_frame, text=value)
label.pack(side=tk.TOP, padx=5, pady=5)
options = sorted(list(set(df.iloc[:, i].dropna().tolist())))
var = tk.StringVar(value=options[0])
option_menu = tk.OptionMenu(self.log_frame, var, *options)
option_menu.pack(side=tk.TOP, padx=5, pady=5)
scrollbar = tk.Scrollbar(self.log_frame)
scrollbar.pack(side=tk.RIGHT, fill=tk.Y)
text = tk.Text(self.log_frame, yscrollcommand=scrollbar.set)
text.pack(side=tk.TOP, fill=tk.BOTH, expand=True)
for row in df.values.tolist():
if row[i] == var.get():
text.insert(tk.END, str(row) + '\n')
scrollbar.config(command=text.yview)
if __name__ == '__main__':
root = tk.Tk()
app = App(root)
root.mainloop()
```
解释:
1. 首先定义一个 `App` 类,它有一个主窗口和一个菜单栏,菜单栏包含一个打开 Excel 文件的选项。点击该选项后,程序将读取 Excel 文件中所有工作表的名称,并在主窗口左侧创建一个按钮列表,每个按钮对应一个工作表。
2. 当用户点击按钮时,程序将读取相应工作表的数据,并在日志框中显示。对于每一列数据,程序将创建一个标签、一个下拉菜单和一个文本框。下拉菜单包含该列数据中所有不同的值,文本框显示该列数据中等于下拉菜单当前选定值的所有行。如果文本框内容超出了日志框的空间,程序将自动添加滑动条以便用户查看所有内容。
注意:程序需要导入 pandas 和 tkinter 模块,如果您的 Python 环境中没有这些模块,请先安装。此外,程序中使用了 tk.filedialog 模块来打开文件,如果您在 Windows 上使用 Python,这个模块应该已经自带了。如果您在其他操作系统上使用 Python,请查看相应的文档以了解如何安装并使用 tk.filedialog 模块。
阅读全文