【QT】Chapter 1. PySide入门知识
一、什么是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即可,安装成功后,找到所在路径,例如:
1 | ..\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项目中都可以提前选择导入,反正即使用不到也不亏。
项目目标:制定一个可以随机用不同语言说“你好世界“的可视化程序
明确目标后,我们就要导入模块了。
1 | import sys # sys在这里主要用于控制进程 |
接着,我们需要创建一个窗口。为了方便使用,这里我们写成一个组件类。
1 | class MyWidget(QtWidgets.QWidget): |
为了实现语言切换,我们需要一个触发器,这里选择的是一个PushButton,这个PushButton有一个触发事件。
1 | self.button=QtWidgets.QPushButton("Click me!") |
好了,然后我们需要能够显示的组件,这里选用的是QLabel:
1 | self.text=QtWidgets.QLabel("Hello World", alignment=QtCore.Qt.AlignCenter) |
虽然我们现在搞好了组件,但是我们还需要对组件进行布局,让他看起来更美观。这里选择QVBoxLayout进行布局:
1 | self.layout = QtWidgets.QVBoxLayout(self) |
别忘了,还有我们的点击事件,我们现在可以将其完善了:
1 | # 表明这是一个槽函数 |
这样,我们就做好一个小组件啦!
但是这个组件并不会自己显示出来,我们需要创建一个应用程序来承载这个组件。
1 | app = QtWidgets.QApplication([]) # 创建一个app |
接着就是组件的显示啦:
1 | widget = MyWidget() |
最终结果如下:
完整代码如下:
1 | import sys |



