【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.pswp.cn/pingmian/94998.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/94998.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

前端常见安全问题 + 防御方法 + 面试回答

目录 XSS(跨站脚本攻击)CSRF(跨站请求伪造)SQL 注入文件上传漏洞其他前端常见安全问题面试常见问答 1. XSS(跨站脚本攻击) 定义 XSS(Cross-Site Scripting)是一种 通过注入恶意脚…

jxWebUI--下拉选择框

下拉选择框提供了预先定义好的选项,用户只能在这些选项中选择输入。 combobox 定义格式 combobox 控件名 属性列表 ;属性 bind 类型:string 缺省值: 输入控件所绑定的变量名。当给输入控件bind了一个变量名后【bindbind_var_name】&#xff0…

大模型时代:用Redis构建百亿级向量数据库方

大模型时代:用Redis构建百亿级向量数据库方案第一章:大模型时代的向量数据库挑战1.1 大模型时代的特征与需求1.2 向量数据库的核心价值1.3 百亿级向量的技术挑战第二章:Redis作为向量数据库的优势2.1 Redis的核心优势2.2 Redis向量搜索模块&a…

jsqlparser(六):TablesNamesFinder 深度解析与 SQL 格式化实现

在数据库应用开发中,SQL语句的解析和处理是一项常见而重要的任务。本文将深入探讨 JSQLParser 中的 TablesNamesFinder 类,分析其核心原理、与 AST 访问接口(CCJSqlParserVisitor )的关系、使用场景,并通过实际代码示例…

Python训练营打卡Day49-神经网络调参指南

知识点回顾:随机种子内参的初始化神经网络调参指南 参数的分类调参的顺序各部分参数的调整心得 作业:对于day41的简单cnn,看看是否可以借助调参指南进一步提高精度。 随机种子 import torch import torch.nn as nn# 定义简单的线性模型&…

Elasticsearch 常用任务管理命令及实战应用

常用任务管理命令 列出所有任务 curl -X GET "http://<es_host>:<es_port>/_tasks?detailedtrue&pretty" -H Content-Type: application/json获取特定类型的任务 curl -X GET "http://<es_host>:<es_port>/_tasks?actions<act…

Java试题-选择题(26)

Java试题-选择题(26) 题目 下列有关Thread的描述,哪个是正确的 ? A:启动一个线程的方法是:thread. run() B:结束一个线程的通常做法是:thread. stop() C:将一个线程标记成daemon线程,意味着当主线程结束,并且没有其它正在运行的非daemon线程时,该daemon线程也会自…

缓存的原理、引入及设计

开篇寄语&#xff1a;缓存&#xff0c;你真的用对了吗&#xff1f; 我们为什么要学习缓存呢&#xff1f;有必要学习缓存吗&#xff1f; 缓存的使用&#xff0c;是提升系统性能、改善用户体验的唯一解决之道。 其实&#xff0c;作为互联网公司&#xff0c;只要有直接面对用户的业…

单片机如何控制模数转换芯片

一、介绍单片机控制模数转换&#xff08;ADC&#xff09;芯片的核心是通过通信接口发送控制指令&#xff0c;并读取转换后的数字信号&#xff0c;本质是“指令交互数据传输”的协同过程&#xff0c;具体实现需分4步完成&#xff0c;关键在于接口匹配和时序同步。二、核心1. 先明…

【Proteus仿真】开关控制系列仿真——开关控制LED/拨码开关二进制计数/开关和继电器控制灯灭

目录 0案例视频效果展示 0.1例子1&#xff1a;开关控制LED灯亮灭 0.2例子2&#xff1a;数码管显示拨码开关二进制计数(000~255) 0.3例子3&#xff1a;开关和继电器控制灯亮灭 1基础知识补充 1.1 74LS245双总线收发器 1.1.1 引脚及功能 1.1.2应用场景 1.1.3真值表 1.2…

Q1 Top IF 18.7 | 基于泛基因组揭示植物NLR进化

文章DOI: 10.1016/j.chom.2025.07.011 标题&#xff1a;Pangenomic context reveals the extent of intraspecific plant NLR evolution 期刊&#xff1a;Cell Hose & Microbe (https://i-blog.csdnimg.cn/direct/0e31f86b94d348b0a1adb084ec4e49b7.png)(https://i-blog.cs…

技术干货|Prometheus PromQL查询语言之聚合操作内置函数

聚合操作 Prometheus还提供了下列内置的聚合操作符,这些操作符作用域瞬时向量。可以将瞬时表达式返回的样本数据进行聚合,形成一个新的时间序列。 sum (求和) min (最小值) max (最大值) avg (平均值) stddev (标准差) stdvar (标准差异) count (计数) count_values …

Redis 哨兵(Sentinel)全面解析

在2025年的数字化浪潮中&#xff0c;想象这样一个场景&#xff1a;凌晨3点&#xff0c;电商平台流量突然暴增&#xff0c;主Redis服务器因硬件故障突然宕机。几年前&#xff0c;这意味着紧急电话、慌乱的运维人员和不可避免的业务中断。而今天&#xff0c;用户甚至没有察觉任何…

【数学史冷知识】关于行列式的发展史

学习的途中会遇到一些有意思的东西&#xff0c;我想着做一个专栏《艾萨克纪行简报》&#xff0c;专门写这些知识发展历史。可以让您从繁忙的学习生活中放松&#xff0c;添些耀彩。行列式和微积分一样&#xff0c;都是两个人独立发现的。而且还都有莱布尼茨。1683 年&#xff0c…

【python】python进阶——生成器

目录 一、生成器介绍 1.1 生成器与迭代器的关系 1.2 生成器与return比较 二、创建生成器 方法1: 生成器函数 方法2: 生成器表达式 三、生成器的实际应用场景 3.1 处理大型文件 3.2 生成无限序列 3.3 数据管道处理 四、生成器的高级用法 4.1 使用send()方法传递值 …

【Pytorch】生成对抗网络实战

GAN框架基于两个模型的竞争&#xff0c;Generator生成器和Discriminator鉴别器。生成器生成假图像&#xff0c;鉴别器则尝试从假图像中识别真实的图像。作为这种竞争的结果&#xff0c;生成器将生成更好看的假图像&#xff0c;而鉴别器将更好地识别它们。 目录 创建数据集 定…

Java基础第7天总结(代码块、内部类、函数式编程)

代码块静态代码块&#xff1a;有static修饰&#xff0c;属于类&#xff0c;与类一起优先加载&#xff0c;自动执行一次实例代码块&#xff1a;无static修饰&#xff0c;属于对象&#xff0c;每次创建对象时&#xff0c;都会优先执行一次。package com.itheima.code;import java…

文献综述写作指南:从海量文献到逻辑闭环的实战模板

文献综述往往是学术写作的“第一关难题”&#xff1a;面对成百上千篇文献&#xff0c;如何避免“简单罗列”的陷阱&#xff0c;梳理出有逻辑、有洞见的论述体系&#xff1f;本文结合学术写作实践&#xff0c;总结出一套模块化的文献综述“实战模板”&#xff0c;通过结构化方法…

CuTe C++ 简介01,从示例开始

这里先仅仅关注 C 层的介绍&#xff0c;python DSL 以后再说。在 ubuntu 22.04 X64 中&#xff0c;RTX 50801. 环境搭建1.1 安装 cuda1.2 下载源码git clone https://github.com/NVIDIA/cutlass.git1.3 编译mkdir build/ cmake .. -DCUTLASS_NVCC_ARCHS"120" -DCMAK…

Python实现异步多线程Web服务器:从原理到实践

目录Python实现异步多线程Web服务器&#xff1a;从原理到实践引言第一章&#xff1a;Web服务器基础1.1 Web服务器的工作原理1.2 HTTP协议简介1.3 同步 vs 异步 vs 多线程第二章&#xff1a;Python异步编程基础2.1 异步I/O概念2.2 协程与async/await2.3 事件循环第三章&#xff…