首先通过QT designer做出一个简易的读取界面
命名格式如下;
载入需要的库
from PySide2.QtWidgets import QApplication,QMessageBox,QMainWindow,QFileDialog
from PySide2.QtUiTools import QUiLoader
import pandas as pd
import matplotlib.pyplot as plt
这里遇到了一个问题:路径的读取在选择文件之后,读取的代码不能先写在__init__中;
app = QApplication([])#初始化
class fir:#第二个界面(first),含:选取文件,绘图
def __init__(self):
self.ui = QUiLoader().load('初始化1.ui')#加载ui文件
self.ui.show()#显示ui文件
self.ui.tool_choose1.clicked.connect(self.Choose)#点击浏览反应
self.ui.button_plot1.clicked.connect(self.Plot)#点击绘图反应
过去我常用global全局变量的形式处理这类即时操作,显然在这里是行不通的
更合理的做法是return:
def Choose(self):
MainWindow = QMainWindow()
FileDialog = QFileDialog(MainWindow)
FileDirectory = FileDialog.getOpenFileName(MainWindow, "选择文件") #选择目录,返回选中的路径
global directory#这是将dataframe改成list,然后这个列表里面第一项是路径str,第二项是文件类型
directory = list(FileDirectory)
return self.ui.lineEdit_choose1.setText(directory[0])
接着是数据处理:
def Plot(self):
dg = pd.read_excel(directory[0])
x = dg['身高']
#读取excel中表头为身高的列
df_x = x.values.tolist()
#将列二维列表转置成行一维列表
y = dg['腿长']
#同上
df_y = y.values.tolist()
datapho = plt.plot(df_x,df_y)
#通过一维数组绘制折线图plot(x,y) x横坐标,y纵坐标
plt.xlabel("whole")
#横坐标标题
plt.ylabel("leg")
plt.legend('* ')
plt.show()
程序的最终结果: