专栏首页python3Python制作小软件——3. 利用Py

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

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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • python font的处理

    上面的程序时可以正常运行的,其中被高亮的代码是会出错的地方,课本上的源代码是self.font=pygame.font.Sysfont(None,48),但是编...

    py3study
  • 使用Python写Windows Ser

    如果你想用Python开发Windows程序,并让其开机启动等,就必须写成windows的服务程序Windows Service,用Python来做这个事情必...

    py3study
  • Mechanize实战二:获取音悦台公告

    有些网站或论坛为了防止暴力破解,在登录框设置了一个验证码,目前针对验证码的解决方案可谓是千奇百怪,考虑到爬虫所需要的只是数据,完全可以绕过验证码,直接使用COO...

    py3study
  • 【多目标跟踪】搞不懂MOT数据集,会跑代码有啥用!

    数据集用的最多的是 MOTChallenge,专注于行人追踪的。https://motchallenge.net/

    机器视觉CV
  • python font的处理

    上面的程序时可以正常运行的,其中被高亮的代码是会出错的地方,课本上的源代码是self.font=pygame.font.Sysfont(None,48),但是编...

    py3study
  • Mechanize实战二:获取音悦台公告

    有些网站或论坛为了防止暴力破解,在登录框设置了一个验证码,目前针对验证码的解决方案可谓是千奇百怪,考虑到爬虫所需要的只是数据,完全可以绕过验证码,直接使用COO...

    py3study
  • VR+全景播放器+头控讲解-07

    酷走天涯
  • Python实现堆栈

    堆栈是一个后进先出的数据结构,其工作方式就像一堆汽车排队进去一个死胡同里面,最先进去的一定是最后出来。

    一墨编程学习
  • vn.py入门-低买高卖示例

    本文用一个例子来介绍vnpy的用法。从项目创建开始,到一个简单策略的设计。 这个例子连接到CTP接口,每秒检查一下目标合约的价格,若低于指定价格则买入,若高于指...

    用Python的交易员
  • 使用Python写Windows Ser

    如果你想用Python开发Windows程序,并让其开机启动等,就必须写成windows的服务程序Windows Service,用Python来做这个事情必...

    py3study

扫码关注云+社区

领取腾讯云代金券