在您的 Qt for Python 应用程序中使用设计师 UI 文件

将表单转换为 Python 代码

为了演示,我们使用 Qt 小部件动画缓动示例。

该应用程序包括一个源文件,easing.py,一个 UI 文件 form.ui,一个资源文件 easing.qrc 和 YAML 格式的项目文件,easing.pyproject

{
    "files": ["easing.qrc", "ui_form.py", "easing.py", "easing_rc.py",
              "form.ui"]
}

UI 文件通过 用户界面编译器 (uic) 转换为 Python 代码,构建表单。

uic -g python form.ui > ui_form.py

由于顶级小部件命名为 Form,因此生成一个名为 Ui_Form 的 Python 类。它提供了一个接受小部件作为参数的函数 setupUi(),用于创建 UI 元素。

from ui_form import Ui_Form
...
class Window(QtWidgets.QWidget):
    def __init__(self, parent=None):
        super(Window, self).__init__(parent)

        self.m_ui = Ui_Form()
        self.m_ui.setupUi(self)

稍后可以通过 Ui_Form 类访问小部件。

self.m_ui.graphicsView.setScene(self.m_scene)

除了 setupUi() 之外,Ui_Form 还提供了一个方法 retranslateUi(),它可以在发生 QEvent 的类型为 QEventQEvent.LanguageChange,表示应用程序语言发生变化时调用。

UiTools 方法

QUiLoader 类提供一个表单加载器对象,用于在运行时构建用户界面。此用户界面可以从任何 QIODevice(例如,QFile 对象)检索。函数 QUiLoader::load() 使用文件中包含的用户界面描述构建表单小部件。

这通过 uiloader 示例得到证明。

from PySide2.QtUiTools import QUiLoader

if __name__ == '__main__':
    # Some code to obtain the form file name, ui_file_name
    app = QApplication(sys.argv)
    ui_file = QFile(ui_file_name)
    if not ui_file.open(QIODevice.ReadOnly):
        print("Cannot open {}: {}".format(ui_file_name, ui_file.errorString()))
        sys.exit(-1)
    loader = QUiLoader()
    widget = loader.load(ui_file, None)
    ui_file.close()
    if not widget:
        print(loader.errorString())
        sys.exit(-1)
    widget.show()
    sys.exit(app.exec_())

资源导入

单目录使用

当使用来自 资源文件(例如 resources.qrc)的图标时,例如,uic 会生成以下形式的导入

import resources_rc

这假设通过调用 资源编译器 (rcc) 工具生成的 resources_rc.py 文件(传递 -g python 命令行选项)存在于与表单源相同的目录中。

uic 有一个命令行选项 --rc-prefix,导致 rc 指示符被 prepended

import rc_resources

命令行选项 --from-imports 导致导入相对于 '.' 生成

from . import resources_rc

目录树

某些项目具有更复杂的目录树,例如

project
    resources   (resources.qrc)
    ui          (.ui files)

然后资源文件不在与表单源相同的目录中,并且 .ui 文件通常具有相对于资源文件的相对路径

<include location="../resources/resources.qrc"/>

在这种情况下,可以使用命令行选项 --absolute-imports 在 Python 中生成绝对导入,结果如下

import resources.resources_rc

基于假设 .. 是包含在 Python 导入路径列表中的项目的根目录。

对于更深层嵌套的树,可以使用命令行选项 --python-paths <path list> 传递 Python 导入路径列表。然后 uic 将尝试通过匹配形式文件路径与路径组件来确定项目根目录。

如果未提供 --python-paths,则默认检查环境变量 PYTHONPATH

© 2024 Qt 公司有限公司。本文件包含的文档贡献归其各自所有者拥有。提供给您的文档是根据 自由软件基金会发布的 GNU 自由文档许可证版本 1.3 的条款提供的。Qt 和相关商标是芬兰及其他国家/地区的 Qt 公司的商标。所有其他商标均为其各自所有者的财产。