Python制作小软件——3. 利用Py

发布时间:2019-09-26 07:21:27编辑:auto阅读(1906)

    本篇博客衔接前面两篇博客:
    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文件,里面进行详细的说明~

关键字