文章目录

  • 一、基础篇
  • 1、Python图形界面开发的几种方案
  • 2、PySide2、PyQt5 简介
  • 3、安装 PySide2
  • 4、安装PyQt5
  • 5、配置Pycharm
  • 1)自定义 QtDesigner
  • 2)自定义 Pyside2-uic
  • 3)使用自定义工具编写Qt页面
  • 6、编写qt程序
  • 7.发布程序


一、基础篇

1、Python图形界面开发的几种方案

如果用 Python 语言开发 跨平台 的图形界面的程序,主要有3种选择:

  • Tkinter
    基于Tk的Python库,这是Python官方采用的标准库,优点是作为Python标准库、稳定、发布程序较小,缺点是控件相对较少。
  • wxPython
    基于wxWidgets的Python库,优点是控件比较丰富,缺点是稳定性相对差点、文档少、用户少。
  • PySide2、PyQt5
    基于Qt 的Python库,优点是控件比较丰富、跨平台体验好、文档完善、用户多。
    缺点是 库比较大,发布出来的程序比较大。
如果大家要开发小工具,界面比较简单,可以采用Tkinter。

如果是发布功能比较多的正式产品,采用 基于Qt的PySide2、PyQt5。

本教程介绍的就是 使用 PySide2、PyQt5 开发Python程序的图形界面。

2、PySide2、PyQt5 简介

PySide2、PyQt5 都是基于著名的 Qt 库。

Qt库里面有非常强大的图形界面开发库,但是Qt库是C++语言开发的,PySide2、PyQt5可以让我们通过Python语言使用Qt。

但是 PySide2、PyQt5 这两者有什么区别呢?

可以形象地这样说: PySide2 是Qt的 `亲儿子` , PyQt5 是Qt还没有亲儿子之前的收的 `义子` (Riverbank Computing这个公司开发的)。

那为什么 PyQt5 这个义子 反而比 PySide2 这个亲儿子更出名呢?

原因很简单:PySide2 这亲儿子最近(2018年7月)才出生。

但是亲儿子毕竟是亲儿子,Qt准备大力培养,PySide2 或许更有前途。

已经在使用 PyQt5 的朋友不要皱眉, 两个库的使用 对程序员来说,差别很小:它们的调用接口几乎一模一样。

如果你的程序是PyQt5开发的,通常只要略作修改,比如把导入的名字从 PyQt5 换成 PySide2 就行了。反之亦然。

3、安装 PySide2

简易版本

pip install pyside2

更换国内安装源版本

pip install pyside2 -i https://pypi.tuna.tsinghua.edu.cn/simple

备注:

1)查看安装结果

pip freeze

2)确定安装位置(重复安装以获取安装位置,一般为Python安装目录下)

pip install Pyside2

4、安装PyQt5

简易版本

pip install pyqt5-tools

可同时安装 PyQt5 和 一些重要的工具,比如 Qt designer

5、配置Pycharm

目的:在PyCharm中自定义两个工具以便开发时使用

步骤:File->Settings->Tools->External Tools

点击 + 新增自定义工具

1)自定义 QtDesigner
目的:用于生成.ui文件

Name :QtDesigner
Group :Qt
Program :PySide2安装路径下的 designer.exe 路径
		例如:C:\Python\Python39\Scripts\pyside2-designer.exe
Working directory :$ProjectFileDir$
2)自定义 Pyside2-uic
目的:将制作好的.ui文件转化为.py文件

Name :Pyside2-uic
Group :Qt
Program :Python安装目录下Scripts\pyside2-uic.exe
   	例如:C:\Python\Python39\Scripts\pyside2-uic.exe						
Arguments :$FileName$ -o $FileNameWithoutExtension$.py
Working directory :$FileDir$
3)使用自定义工具编写Qt页面
1、点击Tools->Qt->QtDesigner进入ui设计界面
2、完成ui设计后将.ui文件保存在当前项目路径下
3、右击保存的.ui文件,使用自定义的Pyside2-uic工具将界面转化为Python文件

6、编写qt程序

1、在pycharm中点击Tools->Qt->QtDesigner进入ui设计界面
2、选择Main Window后点击创建
3、将左侧的Widget Box中的Push Button和Text Browser相继拖入到中间的Main Window中
4、在右侧的对象查看器中右击Main Window选择布局下的垂直布局
5、按住ctrl+s保存ui文件,文件名为demo_ui.ui
6、在pycharm中右击生成的demo_ui.ui文件,选择Qt->Pyside2-uic
7、在生成的demo_ui.py同级目录下new->python file,文件名为demo.py
8、demo.py编写如下代码,并run即可得到qt程序,在程序中点击按钮便在文本浏览器显示Hello world

demo.py

from PySide2.QtWidgets import QApplication, QMainWindow
from demo_ui import Ui_MainWindow
import sys


class MainWindow(QMainWindow):
    def __init__(self):
        # 首先找到 MainWindow 的父类(就是类 QMainWindow),然后把类 MainWindow 的对象转换为类 QMainWindow 的对象,然后调用对象的__init__()方法
        # super(MainWindow, self).__init__()  # python2写法
        super().__init__()  # python3写法
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)
        # 按钮signal绑定slot函数
        self.ui.pushButton.clicked.connect(self.handle)

    def handle(self):
        self.ui.textBrowser.append('Hello world')


if __name__ == '__main__':
    app = QApplication(sys.argv)
    mw = MainWindow()
    mw.show()
    sys.exit(app.exec_())

7.发布程序

1、在cmd下执行 
	pip install pyinstaller
2、在cmd下进入demo.py所在目录,执行
	pyinstaller demo.py demo_ui.py --noconsole --hidden-import PySide2.QtXml

注释:	
	--noconsole 指定不要命令行窗口,否则我们的程序运行的时候,还会多一个黑窗口。 但是我建议大家可以先去掉这个参数,等确定运行成功后,再加上参数重新制作exe。因为这个黑窗口可以显示出程序的报错,这样我们容易找到问题的线索。

--hidden-import PySide2.QtXml 参数是因为这个 QtXml库是动态导入,PyInstaller没法分析出来,需要我们告诉它

3、这样就会在demo.py目录下产生一个名为dist的目录。里面就有一个名为demo的目录,我们的可执行程序 demo.exe 就在里面

在windows下第2步中的cmd命令,我们可以使用编写package.bat文件方式执行

package.bat

@echo off
pyinstaller demo.py demo_ui.py --noconsole --hidden-import PySide2.QtXml
pause