文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

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

2023-01-31 08:09

关注

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

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯