Python制作小软件——3. 利用PyQt5实现界面中的功能

本篇博客衔接前面两篇博客:
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>"))这行命令,这其实是表示我在左下角创建了一个文本框,但是里面先没有加任何东西,只是确定了格式是要加粗的。


这里写图片描述

创建这个的主要目的是显示转换成功与否,如果转换成功,这里就会显示转换成功,而转换失败则显示转换失败。其效果如下图所示:


这里写图片描述

有了这些变量名称之后,我们回到新的后端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_2pushButtonpushButton_ok三个按键对应的功能实现的函数分别为write_folderread_fileprocess,这三个函数我们在后面对会对其进行定义,分别是写出的文件夹读入的文件以及处理过程。按对应的按键,就会进行相应的函数里面的操作。

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出来这两个变量里面的内容。


上图为选取文件的界面,我们有两个限制:一个是我们默认打开的路径在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中显示。操作结果如下图所示:


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文件,里面进行详细的说明~

猜你喜欢

转载自blog.csdn.net/weixin_41929524/article/details/81475935