【QT】PySide6安装与运用

一、什么是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())

猜你喜欢

转载自blog.csdn.net/qq_45957458/article/details/128422786