上一篇中讲了如何配置开发环境,今天讲一下在这个配置下如何进行简单界面的开发及打包。
本文将采用python直接调用QT Designer生成的.ui文件来产生界面。
- 在PyCharm中新建一个工程
- 新建一个test.py文件在工程中。可以使用如下的类似模板的文件内容。只需替换qtCreatorFile中的ui文件路径即可
import sys
import os
from __future__ import division
from PyQt4 import QtCore, QtGui, uic
# Define function to import external files when using PyInstaller.
def resource_path(relative_path):
""" Get absolute path to resource, works for dev and for PyInstaller """
try:
# PyInstaller creates a temp folder and stores path in _MEIPASS
base_path = sys._MEIPASS
except Exception:
base_path = os.path.abspath(".")
return os.path.join(base_path, relative_path)
qtCreatorFile = "ui\example.ui" # your ui file path
Ui_MainWindow, QtBaseClass = uic.loadUiType(resource_path(qtCreatorFile))
class MyApp(QtGui.QMainWindow, Ui_MainWindow):
def __init__(self):
QtGui.QMainWindow.__init__(self)
Ui_MainWindow.__init__(self)
self.setupUi(self)
if __name__ == "__main__":
app = QtGui.QApplication(sys.argv)
window = MyApp()
window.show()
sys.exit(app.exec_())
- 使用QT Designer生成ui文件,保存到工程中
- 使用PyInstaller进行打包, PyInstaller的安装自行百度吧,
这里是相关参数的说明
usage: pyinstaller [-h] [-v] [-D] [-F] [--specpath DIR] [-n NAME]
[--add-data <SRC;DEST or SRC:DEST>]
[--add-binary <SRC;DEST or SRC:DEST>] [-p DIR]
[--hidden-import MODULENAME]
[--additional-hooks-dir HOOKSPATH]
[--runtime-hook RUNTIME_HOOKS] [--exclude-module EXCLUDES]
[--key KEY] [-d] [-s] [--noupx] [-c] [-w]
[-i <FILE.ico or FILE.exe,ID or FILE.icns>]
[--version-file FILE] [-m <FILE or XML>] [-r RESOURCE]
[--uac-admin] [--uac-uiaccess] [--win-private-assemblies]
[--win-no-prefer-redirects]
[--osx-bundle-identifier BUNDLE_IDENTIFIER]
[--distpath DIR] [--workpath WORKPATH] [-y]
[--upx-dir UPX_DIR] [-a] [--clean] [--log-level LEVEL]
[--upx UPX]
scriptname [scriptname ...]
例如下面这条命令,则将程序打包成一个单文件。
pyinstaller -F -w test.py
参数说明:-F 单文件模式 -w 不显示cmd窗口
不加参数则是单文件夹模式,生成的文件及.exe都会在一个文件夹下,默认是在dist目录下
- 上一条命令执行后则会在.py的相同目录下生成同名的.spec文件,可以在这个文件中进行一些配置。以后打包就可以直接使用如下命令
pyinstaller test.spec
- 在spec配置中一个地方的配置比较重要,关系到打包后的程序能否正常运行。
a = Analysis(['test.py'],
pathex=['C:\\PythonProjects\\demo'],
binaries=[],
datas=[('example.ui', 'ui')],
hiddenimports=[],
hookspath=[],
runtime_hooks=[],
excludes=[],
win_no_prefer_redirects=False,
win_private_assemblies=False,
cipher=block_cipher)
就是这句datas=[(‘example.ui’, ‘ui’)] 需要手动添加,第一个参数是当前工程中ui文件的相对路径,第二个参数是打包后ui文件要放入的文件夹,如果想放在根目录下 可以使用”.”, 这里的配置与test.py 中的ui文件的读取代码是对应的,要保持一致。
小结:这样就可以随时根据需要修改ui文件了,而不需每次修改完UI后都要手动将ui文件转换为py文件。有一个地方需要注意一下,就是如果重新执行pyinstaller test.py 则会覆盖spec配置中的datats的设置。但生成spec后就可以用 pyinstaller test.spec进行打包了,spec中都会有相关的参数配置,icon等都可在这里进行设置。
具体可参考pyinstaller的官方文档:点击进入