0


【翻译】在 Python 应用程序中使用Qt Designer的UI文件

原文地址:Using a Designer UI File in Your Qt for Python Application

直接上图,上代码
在这里插入图片描述

将UI文件转为Python

为了演示,我们使用 Qt Widgets 简单示例说明。
这个应用程序由一个源文件

easing.py

、一个 UI 文件

form.UI

、一个资源文件

easing.qrc

和项目文件

easing.pyproject

组成,项目文件采用 YAML 格式:

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

文件通过uic(User Interface Compiler (uic))命令转换为Python文件

ui_form.py

:

uic -g python form.ui > ui_form.py

PS: 官网的介绍太啰嗦,也不清楚这个easing.pyproject是手动创建的还是哪个IDE自动创建的,总之没啥用,还一头雾水,实际上有更简单的方法,详见:
【原创】Anaconda+VScode+PySide6 完美配置Python开发环境,亲测!
简单来说是用Qt for Python插件自动生成ui_form.py及easing_rc.py,文中里有详细的图文介绍,这里不再赘述。
本文的项目即是在此环境中生成的,这里是下载地址。
在这里插入图片描述

原文的代码写的不完整,完整的代码如下:

easing.ui

文件代码如下:

<?xml version="1.0" encoding="UTF-8"?><uiversion="4.0"><class>Form</class><widgetclass="QMainWindow"name="Form"><propertyname="geometry"><rect><x>0</x><y>0</y><width>800</width><height>600</height></rect></property><propertyname="windowTitle"><string>Form</string></property><propertyname="windowIcon"><iconsetresource="easing.qrc"><normaloff>:/icon/icon/huawei.png</normaloff>:/icon/icon/huawei.png</iconset></property><widgetclass="QWidget"name="centralwidget"/><widgetclass="QMenuBar"name="menubar"><propertyname="geometry"><rect><x>0</x><y>0</y><width>800</width><height>21</height></rect></property></widget><widgetclass="QStatusBar"name="statusbar"/></widget><resources><includelocation="easing.qrc"/></resources><connections/></ui>

自动生成的ui_form.py如下:

# -*- coding: utf-8 -*-################################################################################## Form generated from reading UI file 'form.ui'#### Created by: Qt User Interface Compiler version 6.6.3#### WARNING! All changes made in this file will be lost when recompiling UI file!################################################################################from PySide6.QtCore import(QCoreApplication, QDate, QDateTime, QLocale,
    QMetaObject, QObject, QPoint, QRect,
    QSize, QTime, QUrl, Qt)from PySide6.QtGui import(QBrush, QColor, QConicalGradient, QCursor,
    QFont, QFontDatabase, QGradient, QIcon,
    QImage, QKeySequence, QLinearGradient, QPainter,
    QPalette, QPixmap, QRadialGradient, QTransform)from PySide6.QtWidgets import(QApplication, QMainWindow, QMenuBar, QSizePolicy,
    QStatusBar, QWidget)import easing_rc

classUi_Form(object):defsetupUi(self, Form):ifnot Form.objectName():
            Form.setObjectName(u"Form")
        Form.resize(800,600)
        icon = QIcon()
        icon.addFile(u":/icon/icon/huawei.png", QSize(), QIcon.Normal, QIcon.Off)
        Form.setWindowIcon(icon)
        self.centralwidget = QWidget(Form)
        self.centralwidget.setObjectName(u"centralwidget")
        Form.setCentralWidget(self.centralwidget)
        self.menubar = QMenuBar(Form)
        self.menubar.setObjectName(u"menubar")
        self.menubar.setGeometry(QRect(0,0,800,21))
        Form.setMenuBar(self.menubar)
        self.statusbar = QStatusBar(Form)
        self.statusbar.setObjectName(u"statusbar")
        Form.setStatusBar(self.statusbar)

        self.retranslateUi(Form)

        QMetaObject.connectSlotsByName(Form)# setupUidefretranslateUi(self, Form):
        Form.setWindowTitle(QCoreApplication.translate("Form",u"Form",None))# retranslateUi
easing.py

代码如下:

import sys
from PySide6.QtWidgets import QApplication, QMainWindow
from ui_form import Ui_Form  # 根据实际生成的文件名导入classMainWindow(QMainWindow):def__init__(self):super().__init__()
        self.ui = Ui_Form()# 创建 UI 对象
        self.ui.setupUi(self)# 设置 UIif __name__ =="__main__":
    app = QApplication(sys.argv)
    window = MainWindow()
    window.show()# 显示窗口
    sys.exit(app.exec())# 运行应用

在这里插入图片描述

form.ui

文件自动生成的文件名为

ui_form.py

,如上图,主窗口objectName设置为

Form

其生成的Python文件Class名即为

Ui_Form


即可通过

Ui_Form

调用此widget窗口。
除了

setupUi ()

之外,

Ui_Form

还提供了另一个方法

retransateUi () 

,可以通过调用QEvent.LanguageChange 方法,用来改变UI界面显示语言。

self.ui.graphicsView.setScene(self.scene)

UiTools 方法

官网上的这部分代码在我的环境(Python3.8.20)中没跑起来,暂时没找到原因。
以下代码是Using .ui files from Designer or QtCreator with QUiLoader and pyside6-uic中的,之所以没有用原文链接中的代码,是因为其代码根本就不全,别说跑起来了。

import sys
from PySide6.QtUiTools import QUiLoader
from PySide6.QtWidgets import QApplication
from PySide6.QtCore import QFile, QIODevice

if __name__ =="__main__":
    app = QApplication(sys.argv)

    ui_file_name ="form.ui"
    ui_file = QFile(ui_file_name)ifnot ui_file.open(QIODevice.ReadOnly):print(f"Cannot open {ui_file_name}: {ui_file.errorString()}")
        sys.exit(-1)
    loader = QUiLoader()
    window = loader.load(ui_file)
    ui_file.close()ifnot window:print(loader.errorString())
        sys.exit(-1)
    window.show()

    sys.exit(app.exec())

导入资源文件

单一目录使用场景

在这里插入图片描述
当使用Qt Designer设计UI时,若引用了资源文件(如easing.qrc),

form.ui

文件中会包含以下代码

<resources><includelocation="easing.qrc"/></resources>

自动生成的

ui_form.py

中也会自动添加

import easing_rc

目录树场景

有些项目有更复杂的目录结构,如qrc文件和ui文件在多级目录下,如下目录结构:

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

这种情况下当使用Qt Designer设计UI时,若引用了资源文件(如resources.qrc),

*.ui

文件中会包含以下代码

<resources><includelocation="../resources/resources.qrc"/></resources>

自动生成的

ui_*.py

中也会自动添加

import resources.resources_rc

对于更深层次的嵌套,可以使用Python的

os.path

等方法,如果未设置路径,系统会自动检查

PYTHONPATH

环境变量。

基于表述尽可能保持简洁的原因,本文未完全按照原文翻译

标签: python qt ui

本文转载自: https://blog.csdn.net/lxbin/article/details/142768462
版权归原作者 水墨熊猫 所有, 如有侵权,请联系我们删除。

“【翻译】在 Python 应用程序中使用Qt Designer的UI文件”的评论:

还没有评论