本篇博客衔接前面两篇博客:
Python制作小软件——1. 安装并使用PyQt5进行界面设计、Python制作小软件——2. 实现界面中的退出功能。
本文将介绍如何使用Python编写后端的代码,实现我们前面做好的界面中的功能。
转换来的Python文件中重点关注部分
关于按键控件,在从.ui
文件转换过来的Python文件里,我们重点关注这几个部分:
def retranslateUi(self, SRS):
_translate = QtCore.QCoreApplication.translate
SRS.setWindowTitle(_translate("SRS", "Dialog"))
self.label.setText(_translate("SRS", "请输入文件所在路径:"))
self.pushButton.setText(_translate("SRS", "添加文件"))
self.pushButton_2.setText(_translate("SRS", "添加文件夹"))
self.label_2.setText(_translate("SRS", "输出文件夹:"))
self.label_3.setText(_translate("SRS", "<html><head/><body><p><br/></p></body></html>"))
self.pushButton_ok.setText(_translate("SRS", "OK"))
self.pushButton_3.setText(_translate("SRS", "Cancel"))
这里就说明每个按键对应的变量名称。需要注意,这里跟我们前面说明的地方相比,多了一个self.label_3.setText(_translate("SRS", "<html><head/><body><p><br/></p></body></html>"))
这行命令,这其实是表示我在左下角创建了一个文本框,但是里面先没有加任何东西,只是确定了格式是要加粗的。
![这里写图片描述](https://i-blog.csdnimg.cn/blog_migrate/1aa2fb2803a6acebe9cbd85c60346f13.png)
创建这个的主要目的是显示转换成功与否,如果转换成功,这里就会显示转换成功,而转换失败则显示转换失败。其效果如下图所示:
![这里写图片描述](https://i-blog.csdnimg.cn/blog_migrate/ed2abc0f5392c13d833df6eff4ca0bf6.png)
有了这些变量名称之后,我们回到新的后端Python文件中(命名为server.py
,ui文件转换过来的文件叫srs.py
),上一篇博客我们已经将基础后端框架搭建完成,这里我们只需要对其进行扩充即可。
server.py
这里我们直接先贴上整个server.py
文件中的内容,下面再细化讲解。
from PyQt5 import QtWidgets
from srs import Ui_SRS # 导入ui文件转换后的py文件
from PyQt5.QtWidgets import QFileDialog
import pandas as pd
class mywindow(QtWidgets.QWidget, Ui_SRS):
def __init__ (self):
super(mywindow, self).__init__()
self.setupUi(self)
self.pushButton_2.clicked.connect(self.write_folder)
self.pushButton.clicked.connect(self.read_file)
self.pushButton_ok.clicked.connect(self.process)
def read_file(self):
#选取文件
filename, filetype =QFileDialog.getOpenFileName(self, "选取文件", "C:/", "All Files(*);;Text Files(*.csv)")
print(filename, filetype)
self.lineEdit.setText(filename)
def write_folder(self):
#选取文件夹
foldername = QFileDialog.getExistingDirectory(self, "选取文件夹", "C:/")
print(foldername)
self.lineEdit_2.setText(foldername)
# 进行处理
def process(self):
try:
#获取文件路径
file_path = self.lineEdit.text()
#获取文件夹路径
folder_path = self.lineEdit_2.text()
# 读取文件
my_df = pd.read_csv(file_path, encoding = 'mbcs')
# 中间可以进行对文件的任意操作
# 进行csv输出
my_df.to_csv(folder_path + '\result.csv')
success_result = r'转换成功!'
self.label_3.setText(success_result)
except:
fail_result = r'转换失败!'
self.label_3.setText(fail_result)
if __name__=="__main__":
import sys
app=QtWidgets.QApplication(sys.argv)
ui = mywindow()
ui.show()
sys.exit(app.exec_())
细化说明
1. 三个按钮
self.pushButton_2.clicked.connect(self.write_folder)
self.pushButton.clicked.connect(self.read_file)
self.pushButton_ok.clicked.connect(self.process)
上面三行说明pushButton_2
,pushButton
,pushButton_ok
三个按键对应的功能实现的函数分别为write_folder
,read_file
,process
,这三个函数我们在后面对会对其进行定义,分别是写出的文件夹,读入的文件以及处理过程。按对应的按键,就会进行相应的函数里面的操作。
2. 选取文件
def read_file(self): #选取文件
filename, filetype =QFileDialog.getOpenFileName(self, "选取文件", "C:/", "All Files(*);;Text Files(*.csv)")
print(filename, filetype)
self.lineEdit.setText(filename)
函数名称就是我们前面所提到的read_file
然后选取文件的操作就是这一行filename, filetype =QFileDialog.getOpenFileName(self, "选取文件", "C:/", "All Files(*);;Text Files(*.csv)")
,分别以文件名与文件格式的形式存储出来。后面我们也print出来这两个变量里面的内容。
![](https://i-blog.csdnimg.cn/blog_migrate/b288283d83ad9dfcb35f6b2b88e3643e.png)
上图为选取文件的界面,我们有两个限制:一个是我们默认打开的路径在C盘;另一个就是我们选取的文件类型是所有文件,或者是CSV格式的文件,起到一个筛选的作用。
再回到我们的代码,最后一行是比较关键的一行:self.lineEdit.setText(filename)
这一行是一种传递的关系,指我们将filename
这个变量里面的内容传到lineEdit
里面去。这时可能就用童鞋问,lineEdit
是啥?这时我们回到我们上面一篇的博客中,lineEdit
就是我们从ui文件转化成的py文件里面的,我们在界面里面的第一行空白的地方。也就是说,当我们选取了文件之后,界面的第一行就会变为我们的路径。
注意:lineEdit
是非常重要的一个对象,后面我们在处理数据的时候也会调用这个对象来实现对文件的读取。(这样即使直接在第一栏空白的栏里面输入文件路径,也一样可以进行文件操作)
3. 选取文件夹
def write_folder(self): #选取文件夹
foldername = QFileDialog.getExistingDirectory(self, "选取文件夹", "C:/")
print(foldername)
self.lineEdit_2.setText(foldername)
选取文件夹这里和上面选取文件的内容基本雷同,只是函数名称变量,以及后面是在lineEdit_2
中显示。操作结果如下图所示:
![](https://i-blog.csdnimg.cn/blog_migrate/265f687df79be0bcf64395b86bd770c9.png)
4. 处理过程
# 进行处理
def process(self):
try:
#获取文件路径
file_path = self.lineEdit.text()
#获取文件夹路径
folder_path = self.lineEdit_2.text()
# 读取文件
my_df = pd.read_csv(file_path, encoding = 'mbcs')
#---------------------------#
# 中间可以进行对文件的任意操作 #
#---------------------------#
# 进行csv输出
my_df.to_csv(folder_path + '\result.csv')
success_result = r'转换成功!'
self.label_3.setText(success_result)
except:
fail_result = r'转换失败!'
self.label_3.setText(fail_result)
内部处理过程是在按了OK
按钮后才会进行触发,并且输出转换成功还是转换失败的字样,中间空的地地方可以进行任意文件的操作,这里直接空出来了,我们需要的操作因人而异。这里使用了try...except...
是因为如果有任何报错信息,可以直接显示转换失败。
5. 运行
最后我们运行如下代码进行界面的运行即可,上篇博客中也有提及:
if __name__=="__main__":
import sys
app=QtWidgets.QApplication(sys.argv)
ui = mywindow()
ui.show()
sys.exit(app.exec_())
至此,我们就利用Python制作出了属于自己的一个小程序。但是最后还有一步比较关键的一步,就是打包成exe
文件的形式,这部分内容我们在下一个博客:Python制作小软件——4. 利用PyInstaller打包成exe文件,里面进行详细的说明~