Python 模块,用于将 PyQt5 中的 UI 和 RC 文件自动编译为 Python 文件
项目描述
PyQt5 自动编译器 (pyqt5ac)
pyqt5ac 是一个 Python 包,用于将 Qt 的 UI 和 QRC 文件自动编译成 Python 文件。
在 PyQt5 中,Qt Designer是用于使用拖放界面创建 GUI 的应用程序。该接口存储在.ui文件中,任何资源(例如图像或图标)都存储在.qrc文件中。
这两种文件类型必须先编译成 Python 文件,然后才能在 Python 程序中使用。目前有几种方法可以解决这个问题:
- 使用命令行手动编译文件,使用 pyuic5 编译.ui文件,使用 pyrcc5 编译.qrc文件。
- 每次启动应用程序时通过在 Python 脚本中调用 pyuic5 和 pyrcc5 来编译文件
第一种方法的缺点是编译文件可能是一项繁琐的工作,尤其是当面临一个包含许多需要编译的文件的大型项目时。尽管第二种方法消除了编译的繁琐,但每次运行脚本时都会编译这些文件,无论是否有任何更改。这可能会导致性能下降并需要更长的时间来启动您的脚本。
输入pyqt5ac!
pyqt5ac 提供了一个命令行界面 (CLI),它可以搜索您的文件并自动编译任何.ui或.qrc文件。此外,可以从您的 Python 脚本中调用 pyqt5ac。在这两种情况下,ui 和资源文件只有在它们已更新时才会被编译。
安装
pyqt5ac 目前在PyPi上可用。单独安装最简单的方法是pip在命令行中使用
pip install pyqt5ac
安装最新版本。从存储库安装最新代码(通常是稳定的,但可能有未记录的更改或错误)
pip install git+https://github.com/addisonElliott/pyqt5ac.git
对于开发人员,您可以克隆 pyqt5ac 存储库并运行该setup.py文件。使用以下命令从 GitHub 获取副本并安装所有依赖项
git clone https://github.com/addisonElliott/pyqt5ac.git
cd pyqt5ac
pip install .[dev]
以“开发”或“可编辑”模式安装,可以对本地工作代码进行更改,Python 将使用更新后的代码。
入门
从命令行运行
如果 pyqt5ac 是通过 pip 安装的,命令行界面可以像终端中的任何基于 Unix 的程序一样调用
pyqt5ac [OPTIONS] [IOPATHS]...
在界面中,选项的名称略有不同,因此请参阅界面的帮助文件以获取更多信息。最大的区别是 ioPaths 参数是一个空间描述的路径列表,其中偶数项是源文件表达式,奇数项是目标文件表达式。
界面的帮助文件可以运行为
pyqt5ac --help
从 Python 脚本运行
下面的代码片段演示了如何从 Python 脚本调用 pyqt5ac
import pyqt5ac
pyqt5ac.main(rccOptions='', uicOptions='--from-imports', force=False, initPackage=True, config='',
ioPaths=[['gui/*.ui', 'generated/%%FILENAME%%_ui.py'],
['resources/*.qrc', 'generated/%%FILENAME%%_rc.py']])
配置选项
可以为 pyqt5ac 指定的所有选项也可以放在配置文件(JSON 或 YAML)中。我的建议是使用配置文件来轻松编译您的软件。出于测试目的,我将使用命令行界面中的选项使一切正常运行,然后将其转录为配置文件以供重复使用。
无论是通过命令行运行还是从脚本运行,可以给出的参数和选项都是相同的。有效的选项是:
- rccOptions - 传递给资源编译器的附加选项。有关选项的更多信息,请参见 pyrcc5 的手册页。一个有效选项的例子是“-compress 1”。默认是不传递任何选项。
- uicOptions - 传递给 UI 编译器的附加选项。有关选项的更多信息,请参见 pyuic5 的手册页。一个有效选项的例子是'--from-imports'。默认是不传递任何选项。
- force - 指定是否强制编译所有找到的文件。默认为 false 意味着只会编译过时的文件。
- config - 包含有关这些参数的信息的 JSON 或 YAML 配置文件。
- ioPaths - 这是一个 2D 列表,包含有关要编译的源文件以及放置源文件的位置的信息。第一列是源文件全局表达式(意味着您可以使用通配符,** 用于递归文件夹搜索,? 用于选项等来匹配文件名),第二列是目标文件表达式。目标文件表达式识别“特殊”变量,这些变量将被源文件名中的信息替换:
- %%FILENAME%% - 不带扩展名的源文件的文件名
- %%EXT%% - 不包括文件句点的扩展名(例如 ui 或 qrc)
- %%DIRNAME%% - 源文件的目录
- variables - 可以在ioPaths中的路径定义中使用的自定义变量。例如,要将文件搜索限制在特定目录,可以定义一个变量
BASEDIR,然后将其用作%%BASEDIR%%/gui/*.ui* - init_package
__init__.py- 如果指定,如果丢失,也会在每个输出目录中生成一个空文件。不覆盖现有的__init__.py. 默认值为True。
例子
以下面的文件结构为例,需要编译任何 UI 和 QRC 文件。假设 pyuic5 和 pyrcc5 位于 /usr/bin 并且 UIC 编译器需要“--from-imports”。
|-- gui
| |-- mainWindow.ui
| |-- addDataDialog.ui
| `-- saveDataDialog.ui
|-- resources
| |-- images
| |-- stylesheets
| |-- app.qrc
| `-- style.qrc
|-- modules
| |-- welcome
| | |-- module.ui
| | `-- resources
| | |-- images
| | `-- module.qrc
| `-- dataProbe
| |-- module.ui
| `-- resources
| |-- images
| `-- module.qrc
下面的部分演示了如何设置 pyqt5ac 以在给定上述文件结构的情况下编译必要的文件。
选项 1:YAML 配置文件(推荐)
ioPaths:
-
- "gui/*.ui"
- "generated/%%FILENAME%%_ui.py"
-
- "resources/*.qrc"
- "generated/%%FILENAME_%%%%EXT%%.py"
-
- "modules/*/*.ui"
- "%%DIRNAME%%/generated/%%FILENAME%%_ui.py"
-
- "modules/*/resources/*.qrc"
- "%%DIRNAME%%/generated/%%FILENAME%%_rc.py"
uic_options: --from-imports
init_package: True
force: False
现在使用您的配置文件从命令行或 Python 脚本运行 pyqt5ac:
pyqt5ac --config config.yml
或者
import pyqt5ac
pyqt5ac.main(config='config.yml')
选项 2:JSON 配置文件(已弃用)
{
"ioPaths": [
["gui/*.ui", "generated/%%FILENAME%%_ui.py"],
["resources/*.qrc", "generated/%%FILENAME%%_rc.py"],
["modules/*/*.ui", "%%DIRNAME%%/generated/%%FILENAME%%_ui.py"],
["modules/*/resources/*.qrc", "%%DIRNAME%%/generated/%%FILENAME%%_rc.py"]
],
"rcc_options": "",
"uic_options": "--from-imports",
"init_package": true,
"force": false
}
现在使用您的配置文件从命令行或 Python 脚本运行 pyqt5ac:
pyqt5ac --config config.yml
或者
import pyqt5ac
pyqt5ac.main(config='config.yml')
选项 3:Python 脚本
import pyqt5ac
pyqt5ac.main(uicOptions='--from-imports', force=False, initPackage=True, ioPaths=[
['gui/*.ui', 'generated/%%FILENAME%%_ui.py'],
['resources/*.qrc', 'generated/%%FILENAME%%_rc.py'],
['modules/*/*.ui', '%%DIRNAME%%/generated/%%FILENAME%%_ui.py'],
['modules/*/resources/*.qrc', '%%DIRNAME%%/generated/%%FILENAME%%_rc.py']
])
选项 4:命令行
pyqt5ac --uic_options "--from-imports" gui/*.ui generated/%%FILENAME%%_ui.py resources/*.qrc generated/%%FILENAME%%_rc.py modules/*/*.ui %%DIRNAME%%/generated/%%FILENAME%%_ui.py modules/*/resources/*.qrc %%DIRNAME%%/generated/%%FILENAME%%_rc.py
生成的文件结构
|-- gui
| |-- mainWindow.ui
| |-- addDataDialog.ui
| `-- saveDataDialog.ui
|-- resources
| |-- images
| |-- stylesheets
| |-- app.qrc
| `-- style.qrc
|-- generated
| |-- __init__.py_
| |-- mainWindow_ui.py
| |-- addDataDialog_ui.py
| |-- saveDataDialog_ui.py
| |-- app_rc.py
| `-- style_rc.py
|-- modules
| |-- welcome
| | |-- module.ui
| | |-- resources
| | | |-- images
| | | `-- module.qrc
| | `-- generated
| | |-- module_ui.py
| | `-- module_rc.py
| `-- dataProbe
| |-- module.ui
| |-- resources
| | |-- images
| | `-- module.qrc
| `-- generated
| |-- module_ui.py
| `-- module_rc.py
支持
鼓励问题和拉取请求!
可以通过问题跟踪器提交错误。
也欢迎请求请求!
执照
pyqt5ac 有一个基于 MIT 的许可证。
项目详情
下载文件
下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。