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

【Python】QT(PySide2、PyQt5):Qt Designer,VS Code使用designer,可能的报错

Qt designer:

可直接在designer界面,使用拖拽的方式设计需要的界面,可设定部分属性。

安装Pyside2后,designer默认在python安装目录的Lib/sit_packages/PySide2文件夹中。

designer使用:

① 双击打开designer.exe,创建窗体,若包含菜单栏、工具栏、状态栏则使用Main Window,没有则可使用Widget。

② 将需要的控件拖拽到窗体中,自行调整位置和大小,并修改对应的属性。特别注意属性ObjectName,调用控件或设置控件属性时就是使用ObjectName对应的值。其他属性例如字体font、文本内容text等。

③ 设计完成,点击保存,则生成 ui文件(默认与designer.exe在同一文件夹下)。

④ 使用ui文件:1、项目中导入ui文件。2、ui文件生成py文件,并调用py文件。

注:VS Code中可使用扩展启用designer,创建ui文件和自动生成对应的py文件,只需调用该文件即可。

ui文件的使用:

例如:ui文件(myui.ui)的效果图为:

方法1、ui文件导入到py文件中:
from PySide2.QtUiTools import QUiLoaderwindow = QUiLoader().load(ui文件名)
window.show()

举例:

from PySide2.QtWidgets import QApplication
from PySide2.QtUiTools import QUiLoaderclass mywindow:def __init__(self):super().__init__()self.ui = QUiLoader().load('myui.ui')if __name__ == '__main__':app = QApplication()window = mywindow()window.ui.show()app.exec_()

完整导入ui的代码:

from PySide2.QtWidgets import QApplication, QMainWindow
from PySide2.QtUiTools import QUiLoader
from PySide2.QtCore import QFile, QIODevice
import sysclass mywindow:def __init__(self):super().__init__()# self.ui = QUiLoader().load('myui.ui')ui_filename = f"myui.ui"ui_file = QFile(ui_filename)if not ui_file.open(QIODevice.ReadOnly): print(f"Can't open '{ui_filename}'. [{ui_file.errorString()}]")sys.exit(-1)loader = QUiLoader()self.ui = loader.load(ui_file)ui_file.close()if not self.ui: print(f"'{ui_filename}' load failed. [{loader.errorString()}]")sys.exit(-1)if __name__ == '__main__':app = QApplication()window = mywindow()window.ui.show()app.exec_()

方法2、使用命令行生成py文件,并调用:

命令行输入:pyside2-uic ui文件名 > py文件名

举例:

pyside2-uic myui.ui > amyui_ui.py

结果:(生成py文件,文件中类为Ui_MainWindow,类中主要方法为setupUi)

注意:ui文件生成的py文件中为对应的类和方法,需导入该文件并调用类和方法才算使用。

from PySide2.QtWidgets import QMainWindow
from ui生成的py文件(不含.py) import py文件中的类window = QMainWindow()
ui = py文件中的类()
ui.py文件中的方法(window)

举例:

from PySide2.QtWidgets import QApplication, QMainWindow
# from PySide2.QtUiTools import QUiLoader
from amyui_ui import Ui_MainWindow# class mywindow:
#     def __init__(self):
#         super().__init__()
#         self.ui = QUiLoader().load('myui.ui')class mywindow(QMainWindow):def __init__(self):super().__init__()self.ui = Ui_MainWindow()self.ui.setupUi(self)if __name__ == '__main__':app = QApplication()window = mywindow()window.show()app.exec_()

可能的报错:

报错信息:ValueError: source code string cannot contain null bytes。

原因:导入的文件字符编码不是UTF-8。(VS Code最下面状态栏可查看)

解决:将导入的文件字符编码改为UTF-8。

点击UTF-16LE -> 选择:Save with encoding -> 选择:UTF-8。

在VS Code中使用designer:

① 扩展(Extensios)--> 找到Qt for Python或者PySide --> 安装(Install)。

② 设置(Settings)--> 找到Qt for Python --> 在Designer:Path,Rcc:Path,Uic:Path分别输入对应designer.exe,rcc.exe,uic.exe的地址(均在python安装目录下Lib/sit_packages/PySide2文件夹中)。

③ 设置(Settings)--> 找到Qt for Python --> 在Uic:Option添加项(Add Item):-g python。若此步不操作,则自动生成的py文件中不是python语言。

④ 使用:项目文件夹下,右键点击"Create Qt UI File(designer)",在designer界面设计,保存后自动生成ui文件和py文件。自动生成的py文件只是创建了对应的类和方法,需在项目中调用该文件才算使用(使用参考上面命令行生成的py文件)。

designer设计后,额外设定属性:

此处关键是designer设计时各控件的属性ObjectName。

例如:日期选择器设定日历以及当前日期。此处日期选择器的ObjectName为dateEdit。

# 日期选择器(ObjectName为dateEdit)设定日历和当前日期:

ui.dateEdit.setCalendarPopup(True)

ui.dateEdit.setDate(QDate.currentDate())

此处,变量名ui为通过designer设计的界面窗口(可直接导入ui文件,也可ui文件转为py文件并调用)。

from PySide2.QtWidgets import QApplication, QMainWindow
from amyui_ui import Ui_MainWindow
from PySide2.QtCore import QDateclass mywindow(QMainWindow):def __init__(self):super().__init__()self.ui = Ui_MainWindow()self.ui.setupUi(self)# 日期选择器(ObjectName为dateEdit)设定日历和当前日期self.ui.dateEdit.setCalendarPopup(True)self.ui.dateEdit.setDate(QDate.currentDate())if __name__ == '__main__':app = QApplication()window = mywindow()window.show()app.exec_()

结果:

http://www.dtcms.com/a/355198.html

相关文章:

  • 发那科机器人弧焊电源气体省气装置
  • esp32c2 at 请问通过HTTPS进行OTA升级的AT命令流程有吗?
  • 专项智能练习(多媒体概述)
  • 如果已经安装了electron的一个版本,再次使用命令npm install electron不指定electron版本时,会下载安装新版本么?
  • VS2022+QT6.7+Multimedia(捕获Windows音频数据,生成实时频谱)
  • Day16_【机器学习建模流程】
  • Python备份实战专栏第2/6篇:30分钟搭建企业级API认证系统,安全性吊打90%的方案
  • R语言贝叶斯方法在生态环境领域中的高阶技术应用
  • Mac 开发环境与配置操作速查表
  • 基于Vue2+elementUi实现树形 横向 合并 table不规则表格
  • 华为S5720S重置密码
  • 前沿技术观察:从AI 时代到量子计算的下一站
  • 智能物联网(AIoT)核心技术落地路径与企业数字化转型适配方案
  • 如何通俗的理解操作系统的IO多路复用
  • H5 本地跨域设置
  • “帕萨特B5钳盘式制动器结构设计三维PROE模型7张CAD图纸PDF图“
  • UE5.5模型导入FBX强制x轴向前Force Front XAxis
  • 上线问题——Mac系统下如何获取鸿蒙APP证书公钥和MD5指纹
  • 密码管理中
  • 多线程 【详解】| Java 学习日志 | 第 14 天
  • Ansys Icepak AEDT 中的后处理脚本
  • 护网面经总结(三)
  • 三维细节呈现核心技术:法线、凹凸与置换贴图全解析与应用指南
  • 物业满意度调查数据分析——从 “数据杂乱” 到 “精准改进” 的落地经验(满意度调查问卷)
  • Linux系统资源分配算法在VPS云服务器调优-性能优化全指南
  • ​突破RAG知识库中的PDF解析瓶颈:从文本错乱到多模态处理的架构跃迁​
  • 【C++成长之旅】C++入门基础:从 Hello World 到命名空间与函数重载的系统学习
  • NV002NV003美光固态闪存NV026NV030
  • 数组替代map实现性能优化
  • Multimodal Transformer Training in Personalized Federated Learning