Skip to main content

Python 模块,用于将 PyQt5 中的 UI 和 RC 文件自动编译为 Python 文件

项目描述

CI PyPI - Python 版本 派皮 PyPI - 许可证

PyQt5 自动编译器 (pyqt5ac)

pyqt5ac 是一个 Python 包,用于将 Qt 的 UI 和 QRC 文件自动编译成 Python 文件。

在 PyQt5 中,Qt Designer是用于使用拖放界面创建 GUI 的应用程序。该接口存储在.ui文件中,任何资源(例如图像或图标)都存储在.qrc文件中。

这两种文件类型必须先编译成 Python 文件,然后才能在 Python 程序中使用。目前有几种方法可以解决这个问题:

  1. 使用命令行手动编译文件,使用 pyuic5 编译.ui文件,使用 pyrcc5 编译.qrc文件。
  2. 每次启动应用程序时通过在 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 的许可证。

项目详情


下载文件

下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。

源分布

pyqt5ac-1.2.1.tar.gz (10.6 kB 查看哈希)

已上传 source

内置分布

pyqt5ac-1.2.1-py3-none-any.whl (9.8 kB 查看哈希)

已上传 py3