百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

PySide2:一个基于强大Qt(ta的亲儿子) 的Python的GUI库初识

itomcoil 2025-03-02 17:46 13 浏览

1 说明:

=====

1.1 PySide2 :这个QT的亲儿子最近(2018年7月)才出生,而且持续有团队在维护。

1.2 PyQt5:是在PySide2之前的,Qt收的义子 (Riverbank Computing这个公司开发的)。

1.3 Qt库里面有非常强大的图形界面开发库,但是Qt库是C++语言开发的,PySide2、PyQt5可以让我们通过Python语言使用Qt。推荐使用:PySide2。(终于理顺关系了)

1.4 基于Qt 的Python库

1.4.1 优点是控件比较丰富、跨平台体验好、文档完善、用户多。

1.4.2 缺点是 库比较大,发布出来的程序比较大;当然是个好东西,总得介绍介绍。

1.5 大家要开发小工具,界面比较简单,可以采用appJar,EasyGUI,PySimpleGUI,我都有介绍:

《自称是Python中GUI的终极工具:appJar》

《EasyGUI是python的一个超级简单的GUI工具介绍(一)》

《python3的PySimpleGUI库的介绍、安装、学习》

2 安装:

======

2.1 环境:华为笔记本电脑、深度deepin-linux操作系统、python3.8和微软vscode编辑器。

2.2 安装:

#安装 PySide2
pip install pyside2   #官网方法,太慢
#本机安装
#sudo pip3.8 install pyside2  #太慢
#推荐国内源安装
#sudo pip3.8 install -i https://mirrors.aliyun.com/pypi/simple pyside2  

2.3 官网:

https://doc.qt.io/qtforpython/index.html
https://wiki.qt.io/Qt_for_Python
https://forum.qt.io/category/58/qt-for-python
https://pypi.org/project/PySide2/   #最新版
https://wiki.qt.io/PySide2

2.4 竟然没有github地址:

https://github.com/PySide  #PySide (deprecated),这个地址指已经弃用了

3 helloworld:最简单的一个GUI窗口开始学习:

====================================

3.1 多种方法的代码:

#方法一
from PySide2.QtWidgets import QApplication, QLabel                                          
app = QApplication()
label = QLabel("Hello World")
label.show()
app.exec_()
#方法二
from PySide2.QtWidgets import QApplication, QLabel
                                                    
if __name__ == "__main__":
    app = QApplication()
    label = QLabel("Hello World")
    label.show()
    app.exec_()
#方法三
from PySide2.QtWidgets import QApplication, QLabel

def main():
    app = QApplication()
    label = QLabel("Hello World")
    label.show()
    app.exec_()
                                                    
if __name__ == "__main__":
    main()
#方法四
import sys
from PySide2.QtWidgets import QApplication, QLabel
                                                    
if __name__ == "__main__":
    app = QApplication(sys.argv)  #python的sys.argv的知识点
    label = QLabel("Hello World")
    label.show()
    sys.exit(app.exec_())

3.2 python的sys.argv:(引申)

3.2.1 sys.argv[0]表示代码本身文件路径。

3.2.2 sys.argv[ ]其实就是一个列表,里边的项为用户输入的参数,关键就是要明白这参数是从程序外部输入的,而非代码本身的什么地方,要想看到它的效果就应该将程序保存了,从外部来运行程序并给出参数。

3.3 效果图:

4 美化上述:

=========

4.1 QLabel的文本的字体大小和颜色:

from PySide2.QtWidgets import QApplication, QLabel
app = QApplication()
#文本设置:字体大小和颜色定义
label = QLabel("Hello World!")
label.show()
app.exec_()

4.2 窗口大小、位置和标题名:

#方法一
from PySide2.QtWidgets import QApplication, QWidget
class Window(QWidget):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("中文显示窗口")
        #窗口位置和大小
        self.setGeometry(300,300, 500,400)
        self.setIcon()
#myApp = QApplication(sys.argv)
app = QApplication()  #与上面相同
window = Window()
window.show()
app.exec_()
#方法二:窗口大小、位置和标题名,带有窗口内容显示文本的
#增加控件:QWidget,QFormLayout,QVBoxLayout
from PySide2.QtWidgets import QApplication, QLabel,QWidget,QFormLayout,QVBoxLayout
app = QApplication()
#自定义Windowti=window title=窗口相关设置:类(python的基础知识)
class Windowti(QWidget):
    #初始化特性
    def __init__(self):
        QWidget.__init__(self)
        #窗口标题名
        self.setWindowTitle('你好世界!HelloWorld!')  #支持中文
        #self.setMinimumWidth(400) #最小窗口宽度
        #窗口大小和位置
        #x和y是坐标,左上角坐标为0,0
        #w和h是宽和高,即窗口大小
        #setGeometry(x: int, y: int, w: int, h: int)
        self.setGeometry(10,10,500,500)
        # Create the QVBoxLayout that lays out the whole form
        self.layout = QVBoxLayout()
        # Create the form layout that manages the labeled controls
        self.form_layout = QFormLayout()
        self.greeting = QLabel('', self)
        #self.form_layout.addRow('Hello World!', self.greeting)
        self.form_layout.addRow('Hello World!', self.greeting)
        # Add the form layout to the main VBox layout
        self.layout.addLayout(self.form_layout)
        # Set the VBox layout as the window's main layout
        self.setLayout(self.layout)

    def run(self):
        # Show the form
        self.show()
        # Run the qt application
        app.exec_()

myfirstapp=Windowti()
myfirstapp.run()

效果图:

4.3 qml法:

4.3.1 文件夹:1hw下面有2个文件:main.py和mian.qml

4.3.2 main.py代码:

from PySide2.QtWidgets import QApplication
from PySide2.QtQml import QQmlApplicationEngine

if __name__ == "__main__":
    app = QApplication()
    #注意main.qml文件的目录和路径
    engine = QQmlApplicationEngine("/home/xgj/Desktop/pyside2/1hw/main.qml")
    app.exec_()

4.3.3 main.qml代码:注意:安装插件:Qt for python,这样qml代码才有高亮。

import QtQuick 2.7
import QtQuick.Window 2.3
import QtQuick.Controls 2.3

ApplicationWindow {
    id: _window
    // 窗口标题设置
    title: "qml显示窗口Helloworld!"
    // 窗口大小和位置的设置
    width: 800
    height: 500
    x:300
    y:300
    // Window默认不可见,需要进行设置为可见
    visible: true
}

4.3.4 运行效果图:

5 图片显示:

========

5.1 静态图片显示:

from PySide2.QtWidgets import QApplication, QLabel
from PySide2.QtGui import QPixmap
#app = QApplication([])
app = QApplication()  #等同于上面
Label = QLabel()
#指定图片的目录和路径,图片格式:jpeg,jpg,png,ico均可
PixMap = QPixmap("/home/xgj/Desktop/pyside2/20.jpeg")
#PixMap = QPixmap("/home/xgj/Desktop/pyside2/18.jpg")
#PixMap = QPixmap("/home/xgj/Desktop/pyside2/1231.png")
#PixMap = QPixmap("/home/xgj/Desktop/pyside2/1.ico")
#PixMap = QPixmap("/home/xgj/Desktop/pyside2/yytd.gif")  #显示静态的,不是gif动态的
Label.setPixmap(PixMap)
Label.show()
app.exec_()

效果图:

5.2 gif图显示:

from PySide2.QtWidgets import QApplication, QLabel
from PySide2.QtGui import QMovie
#app = QApplication([])
app = QApplication()
Label = QLabel()
#注意不要把这行放到实例化app对象的上面,会无效
#gif因为是动态的,属于movie动画类
Movie = QMovie("/home/xgj/Desktop/pyside2/yytd.gif")  #可以
#Movie = QMovie("/home/xgj/Desktop/pyside2/test.mp4")  #报错
Label.setMovie(Movie)
#这句表示播放动画,不能省略。也不能放到show后面,否则无法自适应大小
Movie.start()                                
Label.show()
app.exec_()

效果图:

====很仔细,初始pyside2===

整理并分享出来,喜欢的就点赞、关注、评论、转发和收藏。

相关推荐

selenium(WEB自动化工具)

定义解释Selenium是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。支持的浏览器包括IE(7,8,9,10,11),MozillaF...

开发利器丨如何使用ELK设计微服务中的日志收集方案?

【摘要】微服务各个组件的相关实践会涉及到工具,本文将会介绍微服务日常开发的一些利器,这些工具帮助我们构建更加健壮的微服务系统,并帮助排查解决微服务系统中的问题与性能瓶颈等。我们将重点介绍微服务架构中...

高并发系统设计:应对每秒数万QPS的架构策略

当面试官问及"如何应对每秒几万QPS(QueriesPerSecond)"时,大概率是想知道你对高并发系统设计的理解有多少。本文将深入探讨从基础设施到应用层面的解决方案。01、理解...

2025 年每个 JavaScript 开发者都应该了解的功能

大家好,很高兴又见面了,我是"高级前端进阶",由我带着大家一起关注前端前沿、深入前端底层技术,大家一起进步,也欢迎大家关注、点赞、收藏、转发。1.Iteratorhelpers开发者...

JavaScript Array 对象

Array对象Array对象用于在变量中存储多个值:varcars=["Saab","Volvo","BMW"];第一个数组元素的索引值为0,第二个索引值为1,以此类推。更多有...

Gemini 2.5编程全球霸榜,谷歌重回AI王座,神秘模型曝光,奥特曼迎战

刚刚,Gemini2.5Pro编程登顶,6美元性价比碾压Claude3.7Sonnet。不仅如此,谷歌还暗藏着更强的编程模型Dragontail,这次是要彻底翻盘了。谷歌,彻底打了一场漂亮的翻...

动力节点最新JavaScript教程(高级篇),深入学习JavaScript

JavaScript是一种运行在浏览器中的解释型编程语言,它的解释器被称为JavaScript引擎,是浏览器的一部分,JavaScript广泛用于浏览器客户端编程,通常JavaScript脚本是通过嵌...

一文看懂Kiro,其 Spec工作流秒杀Cursor,可移植至Claude Code

当Cursor的“即兴编程”开始拖累项目质量,AWS新晋IDEKiro以Spec工作流打出“先规范后编码”的系统工程思维:需求-设计-任务三件套一次生成,文档与代码同步落地,复杂项目不...

「晚安·好梦」努力只能及格,拼命才能优秀

欢迎光临,浏览之前点击上面的音乐放松一下心情吧!喜欢的话给小编一个关注呀!Effortscanonlypass,anddesperatelycanbeexcellent.努力只能及格...

JavaScript 中 some 与 every 方法的区别是什么?

大家好,很高兴又见面了,我是姜茶的编程笔记,我们一起学习前端相关领域技术,共同进步,也欢迎大家关注、点赞、收藏、转发,您的支持是我不断创作的动力在JavaScript中,Array.protot...

10个高效的Python爬虫框架,你用过几个?

小型爬虫需求,requests库+bs4库就能解决;大型爬虫数据,尤其涉及异步抓取、内容管理及后续扩展等功能时,就需要用到爬虫框架了。下面介绍了10个爬虫框架,大家可以学习使用!1.Scrapysc...

12个高效的Python爬虫框架,你用过几个?

实现爬虫技术的编程环境有很多种,Java、Python、C++等都可以用来爬虫。但很多人选择Python来写爬虫,为什么呢?因为Python确实很适合做爬虫,丰富的第三方库十分强大,简单几行代码便可实...

pip3 install pyspider报错问题解决

运行如下命令报错:>>>pip3installpyspider观察上面的报错问题,需要安装pycurl。是到这个网址:http://www.lfd.uci.edu/~gohlke...

PySpider框架的使用

PysiderPysider是一个国人用Python编写的、带有强大的WebUI的网络爬虫系统,它支持多种数据库、任务监控、项目管理、结果查看、URL去重等强大的功能。安装pip3inst...

「机器学习」神经网络的激活函数、并通过python实现激活函数

神经网络的激活函数、并通过python实现whatis激活函数感知机的网络结构如下:左图中,偏置b没有被画出来,如果要表示出b,可以像右图那样做。用数学式来表示感知机:上面这个数学式子可以被改写:...