准备

组件安装

  • pycharm
  • python3.6
  • pyqt5
  • pyqt5-tools
  • pyinstaller

以上各环境具体如何安装,可以查看pip命令。当然个人建议对于新手来说直接在pycharm中的的Interpreter中安装比较快捷方便,我就是这么干的。

配置Externel Tools

为什么需要配置这个东西,主要是因为上面的组件安装完毕后大多数工作都还需要命令行来完成。由于我本地没有配置python的path,这导致使用命令行来进行构建相关文件变得十分痛苦。
以下是我本次做界面开发用到的一些工具,我将其配置成External Tools,以减轻我的工作量。

Pycharm的External Tools的配置界面在:Setting -> Tools -> External Tools

aef02152ef8b4c9faa295e348bc60d6c-1.png

GUI设计工具——Qt Designer

fb51bbf53d194f798bb0c8fcef2625a7-2.png

参数

  • program:C:\Python36\Lib\site-packages\pyqt5-tools\designer.exe
  • Working directory: $ProjectFileDir$

ui文件转py文件工具——PyUIC

3cdf72cac60e454a8c103ef67613fe43-3.png

参数

  • program:C:\Python36\python.exe
  • Arguments:-m PyQt5.uic.pyuic $FileName$ -o $FileNameWithoutExtension$.py
  • Working directory: $ProjectFileDir$

qrc文件转py文件工具——PyRcc

73779ea80eef4afab9cfac92942a410a-4.png

参数

  • program:C:\Python36\Scripts\pyrcc5.exe
  • Arguments:$FileName$ -o $FileNameWithoutExtension$_rc.py
  • Working directory: $ProjectFileDir$

exe可执行文件打包工具——pyinstaller

a37a13566e7a4e99ae444cdace6b979e-5.png

参数

  • program:C:\Python36\Scripts\pyinstaller.exe
  • Arguments:-w -F $FileNameWithoutExtension$.py
  • Working directory: $ProjectFileDir$

pyinstaller参数说明

例如:pyinstaller -w -i c://logo.ico yourfilename.py

  • -F 表示生成单个可执行文件
  • -w 表示去掉控制台窗口,这在GUI界面时非常有用。不过如果是命令行程序的话那就把这个选项删除吧!
  • -p 表示你自己自定义需要加载的类路径,一般情况下用不到
  • -i 表示可执行文件的图标

开发

使用qt designer设计界面

8b804628dfa749b09ac13196d73bb622-7.png

新建工程 -> Tools -> External Tools -> Qt Designer

以下是我通过拖拽等操作设计的一个简单的界面

50c6c6cef0b04683aa319e6f877ed07d-6.png

直接CTRL+S保存后,当前工作目录下会出现一个.ui的文件。

使用PyUIC生成.py文件

e34cdb4d0e954f669f2928d13677e088-8.png

鼠标右键选中.ui文件 -> External Tools -> PyUIC

我的工程中保存的.ui文件名为start,所以对应的也生成了一个名为start.py的文件。这个文件不能直接进行运行,还需要在末尾加一些代码才行。

import button_rc
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
import sys
if __name__ == '__main__':
    app = QApplication(sys.argv)
    MainWindow = QFrame()
    ui = Ui_Frame()
    ui.setupUi(MainWindow)
    MainWindow.show()
    sys.exit(app.exec_())

这么直接加会出现问题,因为我在界面中使用的qrc资源文件,程序中并不能直接使用.qrc文件,所以需要用PyRcc将使用到的.qrc转为.py
文件,方便程序中调用,代码中的import button_rc就是引用资源文件。

使用PyRcc转换资源文件

c2c9b9f908204556acca55f64873aad2-9.png

鼠标右键选中.qrc文件 -> External Tools -> PyRcc

资源文件里的原内容是:

<RCC>
  <qresource prefix="/">
    <file>img/bg.png</file>
  </qresource>
</RCC>

转换后的内容是:

# -*- coding: utf-8 -*-

# Resource object code
#
# Created by: The Resource Compiler for PyQt5 (Qt v5.11.1)
#
# WARNING! All changes made in this file will be lost!

from PyQt5 import QtCore

qt_resource_data = b"\
\x00\x00\x67\x02\
\x89\
\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
......
"

qt_resource_name = b"\
\x00\x03\
\x00\x00\x70\x37\
......
"

qt_resource_struct_v1 = b"\
\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x01\
...
"

qt_resource_struct_v2 = b"\
\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x01\
...
"

qt_version = [int(v) for v in QtCore.qVersion().split('.')]
if qt_version < [5, 8, 0]:
    rcc_version = 1
    qt_resource_struct = qt_resource_struct_v1
else:
    rcc_version = 2
    qt_resource_struct = qt_resource_struct_v2

def qInitResources():
    QtCore.qRegisterResourceData(rcc_version, qt_resource_struct, qt_resource_name, qt_resource_data)

def qCleanupResources():
    QtCore.qUnregisterResourceData(rcc_version, qt_resource_struct, qt_resource_name, qt_resource_data)

qInitResources()

完成以上步骤本次界面开发也就差不错了,只需要使用pyinstaller打包一个exe就可以执行了。
当然还有按钮点击事件等,但却不是在本文考虑范围之内。

使用pyinstaller打包exe文件

52e0934362ba4428b94f539e017d2903-10.png

鼠标右键选中start.py文件 -> External Tools -> PyInstaller

执行完后将在工程目录下生成一个dist文件夹和一个build文件夹,生成的.exe可执行文件在dist文件夹目录下。

待解决问题

  1. 我在界面的按钮上增加了样式,但是未生效。
  2. 界面背景图片如何支持可缩放?

——————————————————————————
行路不知花开处,蓦然回首芷兰香。