使用PyQt5做跨平台程序处理excel

使用PyQt5做跨平台程序处理excel

  • 任务列表
    • 效果
    • 准备相关工具
    • 项目的所有文件
    • 界面生成
      • 可视化设计
      • 将界面转成python文件
    • 主要逻辑
      • 为界面上的组件添加响应逻辑
        • 文件浏览逻辑
        • 实时显示日志逻辑
        • 多线程进度条逻辑
      • 打包成应用程序
      • 打包成安装包

任务列表

我们时常使用python脚本处理excel表格,然而别人使用的时候需要复杂的环境配置以及命令行。所以本篇博客教你如何使用pyqt5做界面,并且打包成exe程序,在任意电脑上运行。整个项目在我的 GitHub 欢迎star

效果

准备相关工具

  1. python 环境(这个不多说了,不会自行百度)
  2. Qt Designer Setup.exe 用于可视化设计界面(提取码:3cm6) 。里面有windows和mac两个版本,根据需要自行选择。
  3. Setup Factory 用于生成exe安装文件(提取码:v543) 。提供了汉化包,安装完成后,将汉化包解压到安装目录。

项目的所有文件

我们将根据这些文件来讲如何设计
使用PyQt5做跨平台程序处理excel_第1张图片

界面生成

可视化设计

打开Qt Designer,如图所示,如果想修改之前的设计界面,点击open加载.UI文件,如果从头开始设计就点击creat(mac版本的软件显示跟win显示不太一样)使用PyQt5做跨平台程序处理excel_第2张图片
由于我之前已经做了一次界面设计,所以直接打开之前的设计,如图所示。可以根据自己的实际需要,选择左边的组件。
使用PyQt5做跨平台程序处理excel_第3张图片

将界面转成python文件

点击保存按钮,会保存一个.UI文件,此时我们需要将.UI文件转成python文件。我的项目里面的文件是:UI_lan.ui
运行如下命令,将ui转成python

pyuic5 -o UI_lan.py UI_lan.ui

在这里插入图片描述
上述界面转成python后的 代码如图

主要逻辑

我们实现主要逻辑的文件是 run.py

为界面上的组件添加响应逻辑

在可视化设计中,我们设计了不同组件,但是每个组件并没有响应逻辑。下面我们将根据需要对每个组件添加逻辑代码。

文件浏览逻辑

如图所示,这里设计了不同对button,现在我们需要将第一个button跟文件浏览逻辑关联起来
使用PyQt5做跨平台程序处理excel_第4张图片
在UI_lan.py 文件中可以看到 这个button的名字为 pushButtonbrowse。
在这里插入图片描述
使用PyQt5做跨平台程序处理excel_第5张图片
1.首先实现文件浏览函数

    def openFileNamesDialog(self):
        options = QFileDialog.Options()
        options |= QFileDialog.DontUseNativeDialog
        filterxls = "XLS (*.xls *.XLS)"
        filterxlsx = "XLSX (*.xlsx *.XLSX)"
        print('打开文件')
        if self.comboBoxfiletype.currentIndex() == 1:
            files, _ = QFileDialog.getOpenFileNames(self, "Select XLS Files", filter=filterxls, options=options)
            if files:
                for file in files:
                    self.listWidget.addItem(file)
        elif self.comboBoxfiletype.currentIndex() == 0:
            files, _ = QFileDialog.getOpenFileNames(self, "Select XLSX Files", filter=filterxlsx, options=options)
            if files:
                for file in files:
                    self.listWidget.addItem(file)

2.将这个函数跟button关联起来
使用PyQt5做跨平台程序处理excel_第6张图片
至此这个button的逻辑已经实现完成。以此类推,其他button的实现根据自己的需要写相关函数并关联即可。
最终效果如图
使用PyQt5做跨平台程序处理excel_第7张图片

实时显示日志逻辑

我们时常需要将处理的过程显示在界面上,以便于能了解运行情况。如图,就是我们显示日志的区域
使用PyQt5做跨平台程序处理excel_第8张图片
如何才能实时获取,显示日志呢?代码如下

先定义一个类
class Stream(QObject):
    """Redirects console output to text widget."""
    newText = pyqtSignal(str)

    def write(self, text):
        QtWidgets.QApplication.processEvents()
        self.newText.emit(str(text))
然后在主逻辑中调用这个类
class anaxcelhandler(QtWidgets.QMainWindow, UI_lan.Ui_MainWindow):
    def __init__(self, parent=None):
        #==========log=====
        sys.stdout = Stream(newText=self.onUpdateText)
        #==========log=====
    def onUpdateText(self, text):
        """Write console output to text widget."""
        cursor = self.textBrowserlog.textCursor()
        cursor.movePosition(QTextCursor.End)
        cursor.insertText(text)
        self.textBrowserlog.setTextCursor(cursor)
        self.textBrowserlog.ensureCursorVisible()
就可以将运行过程中的print输出的内容,显示到界面

多线程进度条逻辑

打包成应用程序

打包成安装包

持续更新中。。。。。。。。

你可能感兴趣的:(技术,pyqt5,excel,程序设计,python,界面设计)