【QT】PySide6安装与运用

news2025/1/11 20:41:24

一、什么是PyQt

简单来说,PyQt就是用Python重构的Qt,一个强大的,创建跨平台GUI(Graphical User Interface)的工具包。开发者为Phil Thompson

二、PySide与PyQt

PyQt和PySide都是基于Python语言对Qt的实现,PyQt的推出时间要比PySide早些,功能也相对更强大,但是,PyQt采用的是GPLv3许可证,如果你在公司使用,可能就会出问题。

相较之下,PySide问世较晚,但确是Qt的亲儿子,采用LGPL协议发布,在未来,极有可能迸发出超过PyQt的影响力。


三、PySide6的安装与使用

直接pip install pyside6即可,安装成功后,找到所在路径,例如:

..\anaconda\Lib\site-packages\PySide6

我们接下来需要设置外部工具,在PyCharm中,打开如下所示的选项。

在添加页面,我们主要需要导入三个外部工具,分别是;

  • Qt Designer:所见即所得式的页面设计工具
  • UIC:将Qt Designer生成的.ui文件转换为.py文件
  • RCC:将编写的.qrc资源转换为.py文件

1️⃣ Qt_Designer

最新版的这三个外部工具都在\PySide6\目录下,不需要进入\Pyside6\script\查找。

填写参数:

  • Arguments: $FilePath$
  • Working directory: $FileDir$

2️⃣ UIC

同理,这里的参数填写为:

  • Arguments: $$FileName$ -o ui_$FileNameWithoutExtension$.py$

  • Working directory: $FileDir$

3️⃣ RCC

这里的参数填写为:

  • Arguments: $$FileName$ -o $FileNameWithoutExtension$_rc.py $

  • Working directory: $FileDir$

不出意外的话,我们可以在这里看到我们的工具:

或是右键某个程序,也可以找到我们安装好的工具。


四、PySide6的核心模块

PySide6支持大量的模块,这些模块可以提供功能强大的开发支持。

其中,核心模块有三个:

模块名描述
QtCore提供核心的非GUI功能,如信号和槽、属性、项目模型的基类、序列化等。
QtGui扩展QtCore的GUI功能:事件,窗口和屏幕,OpenGL和基于光栅的2D绘画,以及图像。
QtWidgets为应用程序提供可随时使用的小组件,包括用于UI的图形元素。

其他主要模块如下:

模块名
QtBluetooth
QtCharts
QtConcurrent
QtDataVisualization
QtDBus
QtDesigner
QtHelp
Qt Multimedia
Qt Multimedia Widgets
QtNetwork
Qt Network Authorization
QtNfc
QtOpenGL
Qt OpenGL Widgets
QtPDF
Qt PDF Widgets
QTQml

其他模块可以查看官方文档:https://doc.qt.io/qtforpython/modules.html


五、快速构建一个PySide6可视化程序

我们现在尝试用PySide6来说Hello World吧!

之前说的那三个核心模块,其实在每个PySide项目中都可以提前选择导入,反正即使用不到也不亏。

项目目标:制定一个可以随机用不同语言说“你好世界“的可视化程序

明确目标后,我们就要导入模块了。

import sys # sys在这里主要用于控制进程
import random # random在这里用于选择随机项
from PySide6 import QtCore,QtWidgets,QtGui # 核心模块

接着,我们需要创建一个窗口。为了方便使用,这里我们写成一个组件类。

class MyWidget(QtWidgets.QWidget):
	# 选择继承自QWidgets.QWidget,这样就能当个小组件用啦
    def __init__(self):
        super().__init__()

为了实现语言切换,我们需要一个触发器,这里选择的是一个PushButton,这个PushButton有一个触发事件。

self.button=QtWidgets.QPushButton("Click me!") 
# 继承自组件类QPushButton(text)

self.button.clicked.connect(self.magic)
# 设置点击时间, 通过connect与槽函数连接起来

@QtCore.Slot() # 表明这是一个槽函数
def magic(self):
	pass

好了,然后我们需要能够显示的组件,这里选用的是QLabel

self.text=QtWidgets.QLabel("Hello World",           						alignment=QtCore.Qt.AlignCenter)

# 设置我们的随机框
self.hello=["Hallo Welt", "Hei maailma", "Hola Mundo", "Привет мир","你好"]

虽然我们现在搞好了组件,但是我们还需要对组件进行布局,让他看起来更美观。这里选择QVBoxLayout进行布局:

self.layout = QtWidgets.QVBoxLayout(self)
# 传递自身,表示本组件采用的布局方式

self.layout.addWidget(self.text) # 添加组件
self.layout.addWidget(self.button)

别忘了,还有我们的点击事件,我们现在可以将其完善了:

@QtCore.Slot() # 表明这是一个槽函数
def magic(self):
	self.text.setText(random.choice(self.hello))

这样,我们就做好一个小组件啦!

但是这个组件并不会自己显示出来,我们需要创建一个应用程序来承载这个组件。

app = QtWidgets.QApplication([]) # 创建一个app
sys.exit(app.exec()) # 设置app的退出事件

接着就是组件的显示啦:

widget = MyWidget()
widget.resize(800, 600)
widget.show()

最终结果如下:

完整代码如下:

import sys
import random
from PySide6 import QtCore,QtWidgets,QtGui


class MyWidget(QtWidgets.QWidget):

    def __init__(self):
        super().__init__()

        self.hello=["Hallo Welt", "Hei maailma", "Hola Mundo", "Привет мир","你好"]
        self.button=QtWidgets.QPushButton("Click me!")

        self.text=QtWidgets.QLabel("Hello World",
                                   alignment=QtCore.Qt.AlignCenter)
        self.layout=QtWidgets.QVBoxLayout(self)
        self.layout.addWidget(self.text)
        self.layout.addWidget(self.button)

        self.button.clicked.connect(self.magic)

    @QtCore.Slot()
    def magic(self):
        self.text.setText(random.choice(self.hello))

if __name__ == '__main__':
    app=QtWidgets.QApplication([])
    widge=MyWidget()
    widge.setWindowTitle("Say Hello")
    widge.resize(800,600)
    widge.show()
    sys.exit(app.exec())

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/110706.html

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

相关文章

paddle nlp taskflow 全家桶 包括代码生成与AIGC图片生成 一起探索paddle nlp 开包即用的能力吧

paddle nlp作为自然语言处理领域的全家桶,具有很多的不错的开箱即用的nlp能力。今天我们来一起看看基于paddle nlp中taskflow开箱即用的能力有哪些。 第一步先升级aistudio中的paddlenlp 保持最新版本。 pip install -U paddlenlpLooking in indexes: https://pypi…

ERP外网访问,快解析助力企业远程办公

ERP系统是现代信息技术和先进管理经验的有效结合,实现对企业经营活动的自动、完整的记录,替代重复劳动,对企业人力资源、物流、资金流、票据流和信息流等的科学管理,实现业务管理数据和财务数据高度统一,实现对企业业务…

论文导读 | 正则路径查询

前言 正则路径查询(Regular Path Query, RPQ)为带标签的图数据上重要的查询类型之一,旨在找出由至少一条满足条件的路径相连接的结点对,其中需满足的条件以正则表达式表达。当前对 RPQ 的研究以提升查询效率为目的,主…

php项目管理系统 。集产品管理、项目管理、质量管理、文档管理、 组织管理和事务管理于一体,是一款专业的研发项目管理软件

介绍 一款国产的项目管理软件。它集产品管理、项目管理、质量管理、文档管理、 组织管理和事务管理于一体,是一款专业的研发项目管理软件,完整地覆盖了项目管理的核心流程。 管理思想注重实效,功能完备丰富,操作简洁高效&#x…

【Python】基础知识(列表,元组)

目录列表和元组列表创建列表访问下标切片操作遍历列表元素新增元素查找元素删除元素连接列表元组写在前面🍎:码字不易,如果对你有帮助的话,给个三连或者关注一下吧🍰,感谢支持!📣列表…

操作手册(GB8567——88)基于协同的在线表格forture-sheet

操作手册(GB8567——88) 1引言 1.1编写目的 为了帮助用户更好的上手本系统,加快用户对forture-sheet在线表格的快速入门,本操作手册详细介绍使用forture-sheet的部分基础操作以及注意细节。 1.2前景 待开发系统的名称&#x…

Docker+Jenkins+Gitee+Maven构建后台jar包后通过命令备份、替换、重启docker-compose编排的java服务

场景 docker-compose入门以及部署SpringBootVueRedisMysql(前后端分离项目)以若依前后端分离版为例: docker-compose入门以及部署SpringBootVueRedisMysql(前后端分离项目)以若依前后端分离版为例_霸道流氓气质的博客-CSDN博客 在上面使用docker-compose编排的ja…

Keil uVision5软件的操作与编写基础(入门)

目录 👬一、如何新建一个空白文档 👬二、程序编写 👬三、编译程序 Keil uVision5是一款编写单片机程序的必备软件。其图标为: 一、如何新建一个空白文档 1.打开Keil uVision5,将会出现工作界面。如图所示:…

Android .obb 详解

1.简介 在Android APP Bundle(aab)之前,上架Google Play 项目都是打包成APK上传,但是Google 对 APK大小是有限制的,刚开始是50M,后来扩展到100M,但是有些APK资源比较多,可能会大于100M, 基于这种情况,Google 允许上传…

音频怎么转换成文字?推荐这几个转文字的方法给你

在平时的工作中大家通常会先利用录音工具将会议内容录制下来,结束以后再根据录音来整理会议纪要,但一边听音频一边整理的操作既麻烦又费时间,还有可能会因为讲述的人语速快,而漏掉一些内容,从而导致效率不高&#xff0…

上海、广州、北京德国签证申请中心即将重新启动

德国签证中心关闭2年后,近日传来了好消息,上海、广州、北京德国签证申请中心即将重新启动,知识人网小编根据德国驻华领馆公布的信息整理并解读相关签证情况。 目前中国公民办理赴德签证,可以通过两种方式进行申请: 1.…

算法学习指南:什么是算法?

解释算法的实现逻辑就像讲故事一样。算法会在普通的解决方案中引入新颖的思路或进行某种创新。在本文中,我们将讨论一个简单问题的几个解决方案,解释影响算法性能的一些因素。在这个过程中,我将介绍一些用于分析算法性能的技巧。这些技巧与算…

Spring data JPA--02

Spring data JPA spirng data jpa是spring提供的一套简化JPA开发的框架,按照约定好的规则进行**【方法命名】去写dao层接口,就可以在不写接口实现的情况下,实现对数据库的访问和操作。同时提供了很多除了CRUD之外的功能,如分页、…

Kubectl 使用详解——k8s陈述式资源管理

目录 一、kubectl 简介 二、kubectl 的使用 1.基础用法 (1)配置kubectl自动补全 (2)查看版本信息 (3)查看资源对象信息 (4)查看集群信息 (5)查看日…

刷爆力扣之 Z 字形变换

刷爆力扣之 Z 字形变换 HELLO,各位看官大大好,我是阿呆 🙈🙈🙈 今天阿呆继续记录下力扣刷题过程,收录在专栏算法中 😜😜😜 该专栏按照不同类别标签进行刷题&#xff0c…

为什么我建议线上高并发量的代码,一定要注意数据可能会不一致?

V-xin:ruyuan0330 获得600页原创精品文章汇总PDF 目录 前情提示什么是数据一致性?一个数据计算链路的梳理数据计算链路的bug电商库存数据的不一致问题大型系统的数据不一致排查有多困难 一、前情提示 这篇文章,咱们继续来聊聊之前的亿级流…

06-Redis缓存设计与性能优化

多级缓存架构 缓存设计 缓存穿透 缓存穿透是指查询一个根本不存在的数据, 缓存层和存储层都不会命中, 通常出于容错的考虑, 如果从存储层查不到数据则不写入缓存层。 缓存穿透将导致不存在的数据每次请求都要到存储层去查询, 失…

基于多级适应方法的无人机(UAV)在发动机输出情况下的导航和路径规划(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

【SwinTransformer】GitHub源码,main.py,swin_transformer.py...

声明:仅学习使用~ “我们抬头便看到星光,星星却穿越了万年”。 Contents 数据与环境配置解读main.pyswin_transformer.py数据与环境配置解读 来看 SwinTransformer 的github官网。已经开源了。(想不到在家里居然可以直接上GItHub,真好啊!) 进去后可以看到如下界面: I…

Windows tensorflow、keras虚拟环境搭建记录(使用conda和mamba)

Windows tensorflow、keras虚拟环境搭建记录 过程记录 首先创建虚拟环境 注意如果之前把conda镜像源配置到了国内,那这一步就不要挂梯子,否则会报出这种错误 conda create --name TF python3.5.2TF那里是给虚拟环境取个名字python后面指定版本号&#x…