本文旨在通过一个简单的demo,介绍基于Python3、PyQT5的环境下开发桌面应用程序的一种方案,当然开发Python的桌面应用程序不止是PyQT 这一种方案,还可以使用Python自带的Tkinter 来实现。

本文目录:

  • 1. 安装依赖环境
  • 2. 安装Eric6
  • 3. 配置Eric
  • 4. 创建窗口应用
    • 4.1 创建窗体UI
    • 4.2 实现代码逻辑
  • 5. 打包py脚本输出exe
    • 5.1 安装pyinstaller
    • 5.2 打包输出exe程序
  • 参考资料:

1. 安装依赖环境

Eric6官网:http://eric-ide.python-projects.org/

Eric6 依赖的组件必须先安装好,依赖组件列表如下:

依赖:
为了使用 eric6 你应该预先安装好下列组件:- Python 3.4.0 or better
- Python 2.7.10 or better
- Qt 5.3.0 or better (from The Qt Company)
- Qt 4.8.0 or better (from The Qt Company)
- PyQt 5.3.0 or better (from Riverbank)
- PyQt 4.10.0 or better (from Riverbank)
- QScintilla 2.8.0 or better (from Riverbank)

组件太多,并且他们之间的依赖关系一言不合就出错,这里介绍个比较好的集成环境 Anaconda3 (64-bit) ,用它来安装Pyqt等可以比较省心。

我本机的环境是:

- Win7 64位
- Anaconda 3-5.2.0-Windows-x86_64
- Python 3.6.5
- pip 10.0.1
- Eric6 18.10
- Pyqt 5.9.2
- QScintilla
- PyInstaller 3.5.dev0

其中QScintilla 是通过命令pip3 install QScintilla安装的。

2. 安装Eric6

依赖环境都搞定后,下载Eric6:
Eric6稳定版官方下载地址:Eric6-18 :点我去下载

由于18.0版本开始没有了汉化包(或者是现在到了18.10版本都还没有出来?),我们可以用17.12里面的中文包来达到汉化的目标。
Eric6-17.12:点我去下载

下载后,把18.10的主程序zip包解压,然后把17.12这个中文语言包解压,覆盖到18.10目录,然后在cmd进入这个18.10主程序包解压目录,执行下面的命令安装:

pyton install.py

安装完成后启动,双击eric6.cmd文件启动(我的因为是安装了Anaconda3,所以这个cmd文件所在路径为:C:\ProgramData\Anaconda3\Scripts),如果界面是中文的表示前面的汉化操作成功。

这里有个小问题,双击这个批处理启动的时候,会一闪而过一个黑色的cmd窗口,不能忍,用一个简单的方法搞定… ,给这个文件创建个快捷方式发送到桌面,然后在这个快捷方式上右键属性,在运行方式那里把【常规窗口】改为 最小化:

然后点应用-确定,下次双击启动就妥妥的看不到一闪而过的忧伤了…

3. 配置Eric

启动eric6后,界面如下,可以看到中文汉化成功:

首次启动,会自动弹出对配置对话框提示让你配置信息,如果你错过了也没关系,从Eric6的应用程序界面菜单[设置-首选项]进入,具体配置如下:






从菜单的插件-插件存储库进入,安装jedi插件:

最后配置一下默认工作目录:

4. 创建窗口应用

4.1 创建窗体UI


然后项目文件夹多了以下内容:

回到Eric6界面,左侧的源码Tab页签切换到GUI窗体页签,右键选择新建窗体




然后会引导你选择位置保存这个窗体文件,然后会自动进入QT Designer设计界面:

这个界面,就跟MFC的设计界面差不多,哈哈,左侧鼠标按住Push Button 按钮控件不放,拖动至中间的窗体中,然后双击这个控件,输入名字:测试按钮,再添加一个text文本控件,然后设置窗体名字:

4.2 实现代码逻辑

在前面设计好ui界面后,保存代码并关闭QT Designer窗口回到Eric6界面

然后在左侧ui文件上右键选择编译窗体生成ui界面组件对应的python代码:

这时会在项目目录生成一个Ui_Test.py 脚本文件,内容如下:

# -*- coding: utf-8 -*-# Form implementation generated from reading ui file 'D:\andy\Rep\eric6\Test.ui'
#
# Created by: PyQt5 UI code generator 5.11.3
#
# WARNING! All changes made in this file will be lost!from PyQt5 import QtCore, QtGui, QtWidgetsclass Ui_dialog(object):def setupUi(self, dialog):dialog.setObjectName("dialog")dialog.resize(400, 343)dialog.setSizeGripEnabled(True)# 定义的按钮self.pushButton = QtWidgets.QPushButton(dialog)self.pushButton.setGeometry(QtCore.QRect(130, 120, 75, 23))self.pushButton.setObjectName("pushButton")# 定义的文本self.plainTextEdit = QtWidgets.QPlainTextEdit(dialog)self.plainTextEdit.setGeometry(QtCore.QRect(110, 170, 181, 31))self.plainTextEdit.setObjectName("plainTextEdit")self.retranslateUi(dialog)QtCore.QMetaObject.connectSlotsByName(dialog)def retranslateUi(self, dialog):_translate = QtCore.QCoreApplication.translatedialog.setWindowTitle(_translate("dialog", "测试应用名"))self.pushButton.setText(_translate("dialog", "测试按钮"))self.plainTextEdit.setPlainText(_translate("dialog", "点击按钮,改变此处文本"))if __name__ == "__main__":import sysapp = QtWidgets.QApplication(sys.argv)dialog = QtWidgets.QDialog()ui = Ui_dialog()ui.setupUi(dialog)dialog.show()sys.exit(app.exec_())

里面可以看到我们在窗体界面定义的两个控件:按钮、文本显示的对应python类中的变量名为:pushButtonplainTextEdit

接着在左侧窗体视图的UI文件上右键选择生成对话框代码:

选择对话框上两个控件所需的响应事件后保存:

然后切换到python源码页签可以看到生成了一个py类文件,里面自动生成了刚才在对话框中选择的两个响应事件的代码逻辑:

# -*- coding: utf-8 -*-"""
Module implementing dialog.
"""
from PyQt5.QtCore import pyqtSlot
from PyQt5.QtWidgets import QDialogfrom .Ui_Test import Ui_dialogclass dialog(QDialog, Ui_dialog):"""Class documentation goes here."""def __init__(self, parent=None):"""Constructor@param parent reference to the parent widget@type QWidget"""super(dialog, self).__init__(parent)self.setupUi(self)@pyqtSlot()def on_pushButton_clicked(self):"""Slot documentation goes here."""# TODO: not implemented yetraise NotImplementedError@pyqtSlot()def on_plainTextEdit_textChanged(self):"""Slot documentation goes here."""# TODO: not implemented yetraise NotImplementedError

我们修改下这个类:

  • 加上main方法
  • 修正引用的ui资源路径:把这里的 from .Ui_Test import Ui_dialog 那个点.去掉,否则会提示找不到这个模块
  • 修改按钮响应函数,改变文本控件显示的内容
  • 修改文本内容改变响应函数,弹出一个消息提示框

修改完成的内容如下:

# -*- coding: utf-8 -*-"""
Module implementing dialog.
"""import sys#这里我们提供必要的引用。基本控件位于pyqt5.qtwidgets模块中。
from PyQt5.QtWidgets import QApplication
from PyQt5.QtCore import pyqtSlot
from PyQt5.QtWidgets import QDialog, QMessageBoxfrom Ui_Test import Ui_dialogclass dialog(QDialog, Ui_dialog):"""Class documentation goes here."""def __init__(self, parent=None):"""Constructor@param parent reference to the parent widget@type QWidget"""super(dialog, self).__init__(parent)self.setupUi(self)@pyqtSlot()def on_pushButton_clicked(self):"""Slot documentation goes here."""# 按钮按下,改变label标签的文本内容self.plainTextEdit.setPlainText(u"按钮触发,我改变了自己!")@pyqtSlot()def on_plainTextEdit_textChanged(self):"""Slot documentation goes here."""# TODO: not implemented yetreply = QMessageBox.question(self, '信息', '文本框内容改变了',QMessageBox.Yes)if __name__ == '__main__':#每一pyqt5应用程序必须创建一个应用程序对象。sys.argv参数是一个列表,从命令行输入参数。app = QApplication(sys.argv)#QWidget部件是pyqt5所有用户界面对象的基类。他为QWidget提供默认构造函数。默认构造函数没有父类。dialog = dialog()#resize()方法调整窗口的大小。这离是400px宽248px高dialog.resize(400, 248)#设置窗口的标题dialog.setWindowTitle('我修改了标题')#显示在屏幕上dialog.show()#系统exit()方法确保应用程序干净的退出#的exec_()方法有下划线。因为执行是一个Python关键词。因此,exec_()代替sys.exit(app.exec_())

然后点击Eric6应用的菜单:项目-属性,配置主脚本为我们这个Test.py

最后,通过菜单或者快捷键Ctrl+F2启动我们这个对话框应用:


点击按钮后:

5. 打包py脚本输出exe

5.1 安装pyinstaller

下载pyinstaller源码,源码github地址,有时候用git拉取下来网速很慢,这里可以从csdn下载我上传的最新版本(20181026更新的):点我下载20181026版本源码

然后解压这个源码到某个目录,cmd进入这个解压目录,通过以下命令安装:python setup.py install

5.2 打包输出exe程序

然后来到我们的.py源码目录,通过以下命令打包成exe文件:

pyinstaller -F -w -i "D:\\xxxxxx\\app.ico" Test.py

基础的命令格式是 pyinstaller [opts] [目标程序.py]

可选的opts有:

-F, –onefile 打包成一个exe文件。
-D, –onedir 创建一个目录,包含exe文件,但会依赖很多文件(默认选项)。
-c, –console, –nowindowed 使用控制台,无界面(默认)
-w, –windowed, –noconsole 使用窗口,无控制台

-i "D:\\xxxxxx\\app.ico" 这个是更改exe的icon,如果不需要可以去掉。

最后打包出来的exe有35MB大小… 因为把QT核心的dll文件打包在一起了,否则在没有安装python以及PyQt的电脑上无法运行的。

更多内容请查看:pyinstaller官方说明


参考资料:

[1]: Pyqt5官方文档
[2]: Python3官方文档
[3]: 廖雪峰老师的Python3 在线学习手册
[4]: 菜鸟学堂-Python3在线学习
[5]: 其他所有分享过python学习填坑网友的经验

Python3的桌面程序开发利器:Eric6的环境搭建、使用相关推荐

  1. 微信小程序开发第一节:环境搭建

    环境搭建 window10,自己已经配置过pycharm. 小程序环境:https://mp.weixin.qq.com/ 自己注册. 微信小程序开发工具下载安装 https://developers ...

  2. python程序开发_用python进行桌面程序开发

    Python是一种面向对象.直译式计算机程序设计语言,也是一种功能强大而完善的通用型语言,已经具有十多年的发展历史,成熟且稳定.这种语言具有非常简捷而清晰的语法特点,适合完成各种高层任务,几乎可以在所 ...

  3. java swt shell_一个java swt桌面程序开发到打包的总结(1)

    一个java swt桌面程序开发到打包的总结(1) --概述与关于swt的问题 一.概述: 几天一直在用金山打字通练习英语(本人英语比较烂),把金山打字能里面的文章全部掠了N遍.打的没意思了,想想怎么 ...

  4. Java桌面程序开发——如何开发美观漂亮好看的桌面程序

    大家想到使用Java这门编程语言大多是脑海中是浮现的B/S开发,高并发.云计算.大数据等等,今天给大家带来的是Java不一样的使用方式--使用Java做PC桌面程序开发. 不同的是,之前Java是使用 ...

  5. 【转】Java桌面程序开发——如何开发美观漂亮好看的桌面程序

    大家想到使用Java这门编程语言大多是脑海中是浮现的B/S开发,高并发.云计算.大数据等等,今天给大家带来的是Java不一样的使用方式--使用Java做PC桌面程序开发. 不同的是,之前Java是使用 ...

  6. windows桌面程序开发_每个软件开发人员都需要的6个Windows桌面实用程序

    windows桌面程序开发 大多数在Windows上工作的软件开发人员都有相当标准的工具集:代码编辑器或IDE: Git或其他版本控制系统: 消息传递客户端(Slack或其克隆之一),等等. 由于大多 ...

  7. 使用python进行桌面程序开发(一)

    Python是一种面向对象.直译式计算机程序设计语言,也是一种功能强大而完善的通用型语言,已经具有十多年的发展历史,成熟且稳定.这种语言具有非常简捷而清晰的语法特点,适合完成各种高层任务,几乎可以在所 ...

  8. 用python进行桌面程序开发

    Python是一种面向对象.直译式计算机程序设计语言,也是一种功能强大而完善的通用型语言,已经具有十多年的发展历史,成熟且稳定.这种语言具有非常简捷而清晰的语法特点,适合完成各种高层任务,几乎可以在所 ...

  9. 桌面应用开发框架 - Windows桌面程序开发工具

    桌面应用开发框架 - Windows桌面程序开发工具 桌面应用开发 桌面应用开发是指基于Windows操作系统开发的应用程序,在Windows环境运行,包括32位\64位的应用程序, 从开发者层面讲, ...

最新文章

  1. 如何用AI实现视频防抖?还是无需裁剪画面的那种 | 谷歌台湾大学
  2. OpenCV中使用神经网络 CvANN_MLP
  3. 某知名大学学生毕业设计,Java学好了就是厉害
  4. React(0.13) 定义一个动态的组件
  5. ICLR 2021投稿中值得一读的NLP相关论文
  6. 往Cloud Foundry上部署应用背后的技术实现
  7. web策略类游戏开发(四)一个可以承载万人在线的架构
  8. Go语言并发爬虫,爬取空姐网所有相册图片
  9. 学习C++就这么简单
  10. 数据接口请求异常:error_springboot2.2.X手册:构建多元化的API接口,我们这样子设计
  11. Android 判断wifi是2.4GHz还是5GHz
  12. nssm在服务器上的使用超详细说明
  13. Linux网站搭建(3)---内网网站发布到外网(转)
  14. python 代码运行时间获取方式
  15. windows通过bat运行指定位置程序及设置开机自启
  16. ISO/IEC JTC 1/SC 42人工智能分技术委员会第一次全会在京召开
  17. CSS进阶 如何实现圆形半圆
  18. Pyspark回归--IsotonicRegression
  19. css-项目实训(招商银行)
  20. uniapp爱玩小灰视频播放器使用流程

热门文章

  1. 三次技术转型的我在帝都的北漂奋斗史
  2. cython(cython安装)
  3. hmmbuild结果文件解读:hmm文件
  4. Windows MongoDB 安装及配置
  5. 登录QQ出现R6030-CRT not initialized
  6. 让你眼前一亮的3. Tomcat 性能调优 (值得收藏)
  7. 高等数学(第七版)同济大学 习题2-2 个人解答(后7题)
  8. 企业WiFi管理 保卫我们的信息安全
  9. AcWing Round #14
  10. Word操作之Mathtype自动进行公式编号