在您的 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 的类型为 QEvent。QEvent.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 公司的商标。所有其他商标均为其各自所有者的财产。