PyQt实现读取文件内容并绘制曲线
数据准备:数据集上传到GitHub(https://github.com/ZY-future/daily-practice)
能够实现读取数据,并将文件中的内容绘制到控件中,我是用GraphicsView显示绘图,但是在显示绘图时还没能找到合适的的方法,由于时间的原因,将输出的图像使用matplotlib进行显示,最终显示的界面效果如下:
开发环境及平台:Windows10,VSC、Desinger、pycharm。
做出这个界面大致需要这几步:QT Desinger中布置控件——>定义槽(这里只定义将Exit和界面关闭)——>在pycharm中将Desinger布置的控件.ui文件转化为.py文件,便于开发——>获取输入框内容并按照要求进行显示。
具体的代码如下:
.py文件
import os
import sys
import pandas as pd
from PyQt5.QtCore import QCoreApplication
from PyQt5.QtWidgets import (QAction, QApplication, QFileDialog, QMainWindow,
QPushButton)
import untitled
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = 'SimHei'
#设置正常显示字符
plt.rcParams['axes.unicode_minus'] = False
def Window1():
row1=int(ui.lineEdit.text())
print(row1)
list1=int(ui.lineEdit_2.text())
print(list1)
#显示图像
print("文件为",ui.textEdit.toPlainText())
file_path=ui.textEdit.toPlainText()
data=pd.read_csv(file_path,header=None,sep='\t')
# ui.graphicsView.showNormal(data.iloc[:20,:1].plot())
ui.graphicsView.clearMask()
data.iloc[row1:list1,:1].plot()
plt.title('第一列数据')
plt.show()
def Window2():
row2=int(ui.lineEdit_3.text())
print(row2)
list2=int(ui.lineEdit_4.text())
print(list2)
file_path=ui.textEdit.toPlainText()
data=pd.read_csv(file_path,header=None,sep='\t')
ui.graphicsView.clearMask()
data.iloc[row2:list2,1:2].plot()
plt.title('第二列数据')
plt.show()
def Window3():
row3=int(ui.lineEdit_5.text())
print(row3)
list3=int(ui.lineEdit_6.text())
print(list3)
file_path=ui.textEdit.toPlainText()
data=pd.read_csv(file_path,header=None,sep='\t')
ui.graphicsView.clearMask()
data.iloc[row3:list3,2:3].plot()
plt.title('第三列数据')
plt.show()
def Window4():
row4=int(ui.lineEdit_7.text())
print(row4)
list4=int(ui.lineEdit_8.text())
print(list4)
file_path=ui.textEdit.toPlainText()
data=pd.read_csv(file_path,header=None,sep='\t')
ui.graphicsView.clearMask()
data.iloc[row4:list4,3:4].plot()
plt.title('第四列数据')
plt.show()
def showDialog(self):
#获取文件路径
getfile=QFileDialog.getOpenFileName()
data=getfile[0]
ui.textEdit.setText(data)
def click_button():
ui.pushButton_6.clicked.connect(showDialog)
ui.pushButton_2.clicked.connect(Window1)
ui.pushButton_3.clicked.connect(Window2)
ui.pushButton_4.clicked.connect(Window3)
ui.pushButton_5.clicked.connect(Window4)
if __name__ == "__main__":
app=QApplication(sys.argv)
mainwindow=QMainWindow()
ui=untitled.Ui_Dialog()
ui.setupUi(mainwindow)
mainwindow.show()
click_button()
print(ui.textEdit.toPlainText())
sys.exit(app.exec_())
.ui文件转为.py文件:
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'untitled.ui'
#
# Created by: PyQt5 UI code generator 5.9.2
#
# WARNING! All changes made in this file will be lost!
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import QMainWindow,QApplication,QTextEdit,QAction,QFileDialog
class Ui_Dialog(object):
def setupUi(self, Dialog):
Dialog.setObjectName("Dialog")
Dialog.resize(1071, 835)
self.pushButton = QtWidgets.QPushButton(Dialog)
self.pushButton.setGeometry(QtCore.QRect(460, 800, 93, 28))
self.pushButton.setObjectName("pushButton")
self.pushButton_6 = QtWidgets.QPushButton(Dialog)
self.pushButton_6.setGeometry(QtCore.QRect(40, 200, 93, 28))
self.pushButton_6.setObjectName("pushButton_6")
self.label_9 = QtWidgets.QLabel(Dialog)
self.label_9.setGeometry(QtCore.QRect(20, 100, 72, 15))
self.label_9.setObjectName("label_9")
self.graphicsView = QtWidgets.QGraphicsView(Dialog)
self.graphicsView.setGeometry(QtCore.QRect(220, 0, 631, 192))
self.graphicsView.setObjectName("graphicsView")
self.graphicsView_2 = QtWidgets.QGraphicsView(Dialog)
self.graphicsView_2.setGeometry(QtCore.QRect(220, 200, 631, 192))
self.graphicsView_2.setObjectName("graphicsView_2")
self.graphicsView_3 = QtWidgets.QGraphicsView(Dialog)
self.graphicsView_3.setGeometry(QtCore.QRect(220, 400, 631, 192))
self.graphicsView_3.setObjectName("graphicsView_3")
self.graphicsView_4 = QtWidgets.QGraphicsView(Dialog)
self.graphicsView_4.setGeometry(QtCore.QRect(220, 600, 631, 192))
self.graphicsView_4.setObjectName("graphicsView_4")
self.textEdit = QtWidgets.QTextEdit(Dialog)
self.textEdit.setGeometry(QtCore.QRect(10, 120, 171, 51))
self.textEdit.setObjectName("textEdit")
self.widget = QtWidgets.QWidget(Dialog)
self.widget.setGeometry(QtCore.QRect(880, 30, 173, 130))
self.widget.setObjectName("widget")
self.verticalLayout = QtWidgets.QVBoxLayout(self.widget)
self.verticalLayout.setContentsMargins(0, 0, 0, 0)
self.verticalLayout.setObjectName("verticalLayout")
self.label = QtWidgets.QLabel(self.widget)
self.label.setObjectName("label")
self.verticalLayout.addWidget(self.label)
self.lineEdit = QtWidgets.QLineEdit(self.widget)
self.lineEdit.setObjectName("lineEdit")
self.verticalLayout.addWidget(self.lineEdit)
self.label_2 = QtWidgets.QLabel(self.widget)
self.label_2.setObjectName("label_2")
self.verticalLayout.addWidget(self.label_2)
self.lineEdit_2 = QtWidgets.QLineEdit(self.widget)
self.lineEdit_2.setObjectName("lineEdit_2")
self.verticalLayout.addWidget(self.lineEdit_2)
self.pushButton_2 = QtWidgets.QPushButton(self.widget)
self.pushButton_2.setObjectName("pushButton_2")
self.verticalLayout.addWidget(self.pushButton_2)
self.widget1 = QtWidgets.QWidget(Dialog)
self.widget1.setGeometry(QtCore.QRect(880, 240, 173, 130))
self.widget1.setObjectName("widget1")
self.verticalLayout_2 = QtWidgets.QVBoxLayout(self.widget1)
self.verticalLayout_2.setContentsMargins(0, 0, 0, 0)
self.verticalLayout_2.setObjectName("verticalLayout_2")
self.label_4 = QtWidgets.QLabel(self.widget1)
self.label_4.setObjectName("label_4")
self.verticalLayout_2.addWidget(self.label_4)
self.lineEdit_3 = QtWidgets.QLineEdit(self.widget1)
self.lineEdit_3.setObjectName("lineEdit_3")
self.verticalLayout_2.addWidget(self.lineEdit_3)
self.label_3 = QtWidgets.QLabel(self.widget1)
self.label_3.setObjectName("label_3")
self.verticalLayout_2.addWidget(self.label_3)
self.lineEdit_4 = QtWidgets.QLineEdit(self.widget1)
self.lineEdit_4.setObjectName("lineEdit_4")
self.verticalLayout_2.addWidget(self.lineEdit_4)
self.pushButton_3 = QtWidgets.QPushButton(self.widget1)
self.pushButton_3.setObjectName("pushButton_3")
self.verticalLayout_2.addWidget(self.pushButton_3)
self.widget2 = QtWidgets.QWidget(Dialog)
self.widget2.setGeometry(QtCore.QRect(870, 430, 173, 130))
self.widget2.setObjectName("widget2")
self.verticalLayout_3 = QtWidgets.QVBoxLayout(self.widget2)
self.verticalLayout_3.setContentsMargins(0, 0, 0, 0)
self.verticalLayout_3.setObjectName("verticalLayout_3")
self.label_5 = QtWidgets.QLabel(self.widget2)
self.label_5.setObjectName("label_5")
self.verticalLayout_3.addWidget(self.label_5)
self.lineEdit_5 = QtWidgets.QLineEdit(self.widget2)
self.lineEdit_5.setObjectName("lineEdit_5")
self.verticalLayout_3.addWidget(self.lineEdit_5)
self.label_6 = QtWidgets.QLabel(self.widget2)
self.label_6.setObjectName("label_6")
self.verticalLayout_3.addWidget(self.label_6)
self.lineEdit_6 = QtWidgets.QLineEdit(self.widget2)
self.lineEdit_6.setObjectName("lineEdit_6")
self.verticalLayout_3.addWidget(self.lineEdit_6)
self.pushButton_4 = QtWidgets.QPushButton(self.widget2)
self.pushButton_4.setObjectName("pushButton_4")
self.verticalLayout_3.addWidget(self.pushButton_4)
self.widget3 = QtWidgets.QWidget(Dialog)
self.widget3.setGeometry(QtCore.QRect(880, 630, 173, 130))
self.widget3.setObjectName("widget3")
self.verticalLayout_4 = QtWidgets.QVBoxLayout(self.widget3)
self.verticalLayout_4.setContentsMargins(0, 0, 0, 0)
self.verticalLayout_4.setObjectName("verticalLayout_4")
self.label_7 = QtWidgets.QLabel(self.widget3)
self.label_7.setObjectName("label_7")
self.verticalLayout_4.addWidget(self.label_7)
self.lineEdit_7 = QtWidgets.QLineEdit(self.widget3)
self.lineEdit_7.setObjectName("lineEdit_7")
self.verticalLayout_4.addWidget(self.lineEdit_7)
self.label_8 = QtWidgets.QLabel(self.widget3)
self.label_8.setObjectName("label_8")
self.verticalLayout_4.addWidget(self.label_8)
self.lineEdit_8 = QtWidgets.QLineEdit(self.widget3)
self.lineEdit_8.setObjectName("lineEdit_8")
self.verticalLayout_4.addWidget(self.lineEdit_8)
self.pushButton_5 = QtWidgets.QPushButton(self.widget3)
self.pushButton_5.setObjectName("pushButton_5")
self.verticalLayout_4.addWidget(self.pushButton_5)
self.retranslateUi(Dialog)
#点击事件,定义槽
self.pushButton.clicked.connect(Dialog.close)
QtCore.QMetaObject.connectSlotsByName(Dialog)
def retranslateUi(self, Dialog):
_translate = QtCore.QCoreApplication.translate
Dialog.setWindowTitle(_translate("Dialog", "Dialog"))
self.pushButton.setText(_translate("Dialog", "Exit"))
self.pushButton_6.setText(_translate("Dialog", "选择文件"))
self.label_9.setText(_translate("Dialog", "文件路径"))
self.label.setText(_translate("Dialog", "row1"))
self.label_2.setText(_translate("Dialog", "list1"))
self.pushButton_2.setText(_translate("Dialog", "显示"))
self.label_4.setText(_translate("Dialog", "row2"))
self.label_3.setText(_translate("Dialog", "list2"))
self.pushButton_3.setText(_translate("Dialog", "显示"))
self.label_5.setText(_translate("Dialog", "row3"))
self.label_6.setText(_translate("Dialog", "list3"))
self.pushButton_4.setText(_translate("Dialog", "显示"))
self.label_7.setText(_translate("Dialog", "row4"))
self.label_8.setText(_translate("Dialog", "list4"))
self.pushButton_5.setText(_translate("Dialog", "显示"))
如有不足,还望指正。