当前位置: 首页 > news >正文

【翻译】在 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"?>
<ui version="4.0"><class>Form</class><widget class="QMainWindow" name="Form"><property name="geometry"><rect><x>0</x><y>0</y><width>800</width><height>600</height></rect></property><property name="windowTitle"><string>Form</string></property><property name="windowIcon"><iconset resource="easing.qrc"><normaloff>:/icon/icon/huawei.png</normaloff>:/icon/icon/huawei.png</iconset></property><widget class="QWidget" name="centralwidget"/><widget class="QMenuBar" name="menubar"><property name="geometry"><rect><x>0</x><y>0</y><width>800</width><height>21</height></rect></property></widget><widget class="QStatusBar" name="statusbar"/></widget><resources><include location="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_rcclass Ui_Form(object):def setupUi(self, Form):if not 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)# setupUidef retranslateUi(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  # 根据实际生成的文件名导入class MainWindow(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, QIODeviceif __name__ == "__main__":app = QApplication(sys.argv)ui_file_name = "form.ui"ui_file = QFile(ui_file_name)if not 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()if not window:print(loader.errorString())sys.exit(-1)window.show()sys.exit(app.exec())

导入资源文件

单一目录使用场景

在这里插入图片描述
当使用Qt Designer设计UI时,若引用了资源文件(如easing.qrc),form.ui文件中会包含以下代码

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

自动生成的ui_form.py中也会自动添加

import easing_rc

目录树场景

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

projectresources   (resources.qrc)ui          (.ui files)

这种情况下当使用Qt Designer设计UI时,若引用了资源文件(如resources.qrc),*.ui文件中会包含以下代码

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

自动生成的ui_*.py中也会自动添加

import resources.resources_rc

对于更深层次的嵌套,可以使用Python的os.path 等方法,如果未设置路径,系统会自动检查PYTHONPATH 环境变量。

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

http://www.lryc.cn/news/460711.html

相关文章:

  • 002-Html
  • 微知-Mellanox提供的一个不错的测试rdma_cm方式建链的工具软件ucmatose?(ucmatose; ucmatose -s 1.1.1.1)
  • Vivado HLS C/RTL 联合仿真时间
  • Python实现图像加密与解密工具
  • 《RabbitMQ篇》消费者轮询消费消息
  • mongodb导入导出
  • 判断 HTTP/2 多路复用是否在服务器上实现
  • (已解决)vscode使用launch.json进行debug调试报错:Couldn‘t spawn debuggee:embedded null byte
  • windows桌面便签小工具,便签软件哪个好用?
  • 【Linux】C文件头文件数裁剪前58644个,裁剪后9373个
  • 线性自抗扰控制(LADRC)系统算法框图
  • 基于SSM的微信小程序博客管理系统(博客1)
  • text-behind-image:轻松创建文字背景图片设计
  • 前端reactvue3——实现滚动到底加载数据
  • qt 安装提示 无法定位程序输入点 systemparametersinfofordpi于动态链接库
  • 算法笔记day04
  • 实战篇:(四)Vue2 + Three.js 创建可交互的360度全景视图,可控制旋转、缩放完整代码
  • 【load_file读文件】
  • JavaScript object(2)
  • Acwing 排序
  • 分布式环境下验证码登录的技术实现
  • 数据结构-5.9.树的存储结构
  • 【Linux】解锁线程基本概念和线程控制,步入多线程学习的大门
  • uniapp学习(005-2 详解Part.2)
  • 深度学习的关键概念和术语
  • navicate可视化数据库操作-cnblog
  • kubernetes中的微服务
  • Python 量子机器学习及其应用
  • echarts显示隐藏柱状图柱子的背景色
  • QT文件操作【记事本】