前序
查询了很多资料,看了很多博客,我就是简单的想用pyqt5读取csv文件并显示内容,这一简单的想法就是不能实现。自己偶然的一次尝试中,解决了这个问题。按照直接读取txt文件的方式去去读csv。
正文
上面是作者的qt界面,我们点击QFile,就能打开文件,将内容显示
我们在on_actQFile_Open_triggered这个函数完成槽与信号的相关操作,本来是
文本文件(.*txt)改成CSV文件(*.csv)
代码实现
# 首先要用Qt creator 设计自己的界面,然后用PyQt5和Qt进行关联
# 不是全部的代码,是关键代码,主要看on_actQFile_Open_triggered这个函数
## ==============自定义功能函数========================
def __openByIODevice(self,fileName): ##用QFile打开文件
fileDevice=QFile(fileName)
if not fileDevice.exists(): #判断文件是否存在
return False
if not fileDevice.open(QIODevice.ReadOnly | QIODevice.Text):
return False
###整个文件一次性读取的方式,可行
## qtBytes=fileDevice.readAll() #返回QByteArray类型
## pyBytes=bytes(qtBytes.data()) # 将QByteArray转换为bytes类型
## text=pyBytes.decode("utf-8") #用utf-8编码为字符串
## self.ui.textEdit.setPlainText(text)
## 逐行读取方式,可行
try:
self.ui.textEdit.clear()
while not fileDevice.atEnd():
qtBytes = fileDevice.readLine() # 返回QByteArray类型
pyBytes=bytes(qtBytes.data()) # QByteArray转换为bytes类型
lineStr=pyBytes.decode("utf-8") #bytes转换为str型
lineStr=lineStr.strip() #去除结尾增加的空行
self.ui.textEdit.appendPlainText(lineStr)
finally:
fileDevice.close()
return True
## ==========由connectSlotsByName()自动连接的槽函数============
@pyqtSlot() ##用QFile 打开文件
def on_actQFile_Open_triggered(self):
curPath=QDir.currentPath() #获取系统当前目录
title="打开一个文件" #对话框标题
filt="程序文件(*.h *.cpp *.py);;CSV文件(*.csv);;所有文件(*.*)" #文件过滤器
fileName,flt=QFileDialog.getOpenFileName(self,title,curPath,filt)
if (fileName == ""):
return
if self.__openByIODevice(fileName):
self.ui.statusBar.showMessage(fileName)
else:
QMessageBox.critical(self,"错误","打开文件失败")
@pyqtSlot() ##用QFile 另存文件
def on_actQFile_Save_triggered(self):
curPath=QDir.currentPath() #获取系统当前目录
title="另存为一个文件" #对话框标题
filt="Python程序(*.py);; C++程序(*.h *.cpp);;csv文件(*.csv);;所有文件(*.*)" #文件过滤器
fileName,flt=QFileDialog.getSaveFileName(self,title,curPath,filt)
if (fileName==""):
return
if self.__saveByIODevice(fileName):
self.ui.statusBar.showMessage(fileName)
else:
QMessageBox.critical(self,"错误","保存文件失败")
结果显示
代码下载
完整代码下载链接:链接:https://pan.baidu.com/s/1jmxBsScd75VGGpopppupjg ,提取码:i16t