用python生成一个GUi,具备以下功能: 1.界面内包含数据文件读取、表格中显示读取的数据以及绘图区域; 2.选择数据文件后,在表格中显示对应的数据,支持表格中数据的编辑和报存。 3.通过点击按钮可新增绘图子页面。
时间: 2023-05-30 13:01:59 浏览: 166
python一个工具类构建GUI界面基础可以大家参考可以大家参考
以下是一个简单的Python GUI程序,具备上述功能:
```python
import tkinter as tk
import pandas as pd
import matplotlib.pyplot as plt
class Application(tk.Frame):
def __init__(self, master=None):
super().__init__(master)
self.master = master
self.pack()
self.create_widgets()
self.data = None
self.table = None
self.figures = []
def create_widgets(self):
# 文件选择按钮
self.file_button = tk.Button(self, text="选择文件", command=self.load_data)
self.file_button.pack(side="top")
# 表格
self.table_frame = tk.Frame(self)
self.table_frame.pack(side="top")
# 绘图按钮
self.plot_button = tk.Button(self, text="新增绘图", command=self.new_figure)
self.plot_button.pack(side="bottom")
def load_data(self):
# 加载数据文件
filename = tk.filedialog.askopenfilename()
if filename:
self.data = pd.read_csv(filename)
self.show_table()
def show_table(self):
# 显示数据表格
if self.table:
self.table.destroy()
self.table = tk.Frame(self.table_frame)
self.table.pack()
# 表头
for i, col in enumerate(self.data.columns):
label = tk.Label(self.table, text=col)
label.grid(row=0, column=i)
# 数据
for i, row in self.data.iterrows():
for j, value in enumerate(row):
entry = tk.Entry(self.table)
entry.insert(0, str(value))
entry.grid(row=i+1, column=j)
entry.bind("<FocusOut>", lambda e, i=i, j=j: self.save_data(i, j, e.widget.get()))
def save_data(self, i, j, value):
# 保存修改后的数据
self.data.iloc[i, j] = value
def new_figure(self):
# 新增绘图子页面
fig, ax = plt.subplots()
self.figures.append(fig)
canvas = FigureCanvasTkAgg(fig, master=self)
canvas.draw()
canvas.get_tk_widget().pack(side="top", fill="both", expand=True)
root = tk.Tk()
app = Application(master=root)
app.mainloop()
```
程序中使用了Tkinter、Pandas和Matplotlib三个库,其中Tkinter用于构建GUI界面,Pandas用于读取和处理数据,Matplotlib用于绘图。
程序界面包括一个文件选择按钮、一个表格和一个新增绘图按钮。点击文件选择按钮可以选择数据文件,程序会读取文件内容并显示在表格中。在表格中修改数据后,需要点击单元格外的其他位置才会保存修改。点击新增绘图按钮可以新增一个绘图子页面,可以在子页面中绘制图形。
需要注意的是,程序中使用了`tk.filedialog`和`FigureCanvasTkAgg`两个类,需要在开头添加以下代码:
```python
from tkinter import filedialog
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
```
阅读全文