pysideRecord

入门程序

helloworld.py

import random
import sys

# 导入所需的模块
from PySide6 import QtCore, QtWidgets


class MyWidget(QtWidgets.QWidget):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)  # 调用父类的初始化方法

        self.hello = ["你好世界", "Hallo Welt", "Hei maailma", "Hola Mundo", "Привет мир"]

        # 设置窗口大小,单位为像素
        self.resize(800, 600)

        # 创建一个按钮控件,其上文字为“点击我”
        self.button = QtWidgets.QPushButton("点击我!")

        # 创建一个标签控件,内容为Hello World,对齐方式为居中
        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)

        # 将button.clicked这个信号与self.magic槽函数连接
        self.button.clicked.connect(self.magic)  # type: ignore

    @QtCore.Slot()
    def magic(self) -> None:
        """槽函数"""
        self.text.setText(random.choice(self.hello))  # 从列表中随机显示一条问候语


if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)  # 创建APP,将运行脚本时(可能的)的其他参数传给Qt以初始化
    widget = MyWidget()  # 实例化一个MyWidget类对象
    widget.show()  # 显示窗口
    sys.exit(app.exec())  # 正常退出APP:app.exec()关闭app,sys.exit()退出进程

1导入模块

import random
import sys
from PySide6 import QtCore, QtWidgets
  • random:用来随机选择问候语
  • sys:用来获取命令行参数、退出程序
  • PySide6:Qt for Python 库,包含 GUI 所需的类
    • QtCore:核心模块(信号/槽、事件、枚举)
    • QtWidgets:所有常用控件(按钮、标签、窗口、布局)

2 定义窗口类

class MyWidget(QtWidgets.QWidget):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)

📌 PySide6 vs PyQt6:几乎一样,只是授权协议不同,API 兼容。

QWidget 是 Qt 里所有控件的基类

这里我们自定义一个窗口类,继承自 QWidget

super().__init__() 调用父类构造函数,初始化控件

3 初始化窗口属性

self.hello = ["你好世界", "Hallo Welt", "Hei maailma", "Hola Mundo", "Привет мир"]
self.resize(800, 600)

self.hello:一个列表,保存多种语言的问候语

resize(800, 600):设置窗口大小

4 创建控件

self.button = QtWidgets.QPushButton("点击我!")
self.text = QtWidgets.QLabel("Hello World", alignment=QtCore.Qt.AlignCenter)

QPushButton:按钮控件

QLabel:标签控件,用于显示文本

  • alignment=QtCore.Qt.AlignCenter:设置文本居中

5 设置布局

self.layout = QtWidgets.QVBoxLayout(self)
self.layout.addWidget(self.text)
self.layout.addWidget(self.button)
  • QVBoxLayout:垂直布局,控件按从上到下排列
  • addWidget():把控件加入布局
  • 这样 self.text 在上,self.button 在下

🔑 重点:Qt 通过布局管理器自动调整控件位置和大小,不需要手动写坐标。

6 信号与槽(事件绑定)

self.button.clicked.connect(self.magic)
  • button.clicked:按钮点击信号
  • .connect(self.magic):连接到一个槽函数(事件处理函数)
  • 当按钮被点击,就自动调用 magic()

这就是 Qt 的 信号/槽机制,类似于 C++ 的事件回调。

7 槽函数

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

@QtCore.Slot():告诉 Qt 这是一个槽函数

random.choice(self.hello):随机选一个问候语

setText():更新标签显示

8 程序入口

if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)
    widget = MyWidget()
    widget.show()
    sys.exit(app.exec())

QApplication:Qt 应用程序对象,必须有且只有一个

widget = MyWidget():实例化我们自定义的窗口类

widget.show():显示窗口

app.exec():进入 Qt 事件循环,程序开始响应用户操作

sys.exit():程序正常退出时返回状态码

9 程序运行流程图

程序开始

├─ 创建 QApplication(必须有)

├─ 实例化 MyWidget 窗口
│ ├─ 创建控件(按钮、标签)
│ ├─ 设置布局
│ └─ 绑定信号槽

├─ show() 显示窗口

└─ 进入事件循环(等待用户点击按钮、关闭窗口等)


PySide6 常见控件对照表

1. 按钮类(Button Widgets)

控件 作用 示例代码
QPushButton 普通按钮 self.btn = QtWidgets.QPushButton("确定")
QCheckBox 复选框 self.chk = QtWidgets.QCheckBox("同意协议")
QRadioButton 单选按钮 self.radio = QtWidgets.QRadioButton("选项A")
QToolButton 工具按钮(小图标) self.toolbtn = QtWidgets.QToolButton()

2. 输入类(Input Widgets)

控件 作用 示例代码
QLineEdit 单行文本输入 self.line = QtWidgets.QLineEdit()
QTextEdit 多行文本框 self.textedit = QtWidgets.QTextEdit()
QPlainTextEdit 多行纯文本框(更轻量) self.plain = QtWidgets.QPlainTextEdit()
QSpinBox 整数输入(带上下箭头) self.spin = QtWidgets.QSpinBox()
QDoubleSpinBox 浮点数输入 self.dspin = QtWidgets.QDoubleSpinBox()
QSlider 滑动条 self.slider = QtWidgets.QSlider(QtCore.Qt.Horizontal)
QComboBox 下拉框 self.combo = QtWidgets.QComboBox(); self.combo.addItems(["A","B","C"])

3. 显示类(Display Widgets)

控件 作用 示例代码
QLabel 显示文字/图片 self.label = QtWidgets.QLabel("Hello")
QLCDNumber 显示数字(像电子钟) self.lcd = QtWidgets.QLCDNumber()
QProgressBar 进度条 self.progress = QtWidgets.QProgressBar()
QCalendarWidget 日历控件 self.calendar = QtWidgets.QCalendarWidget()
QDial 圆形旋钮 self.dial = QtWidgets.QDial()

4. 容器类(Container Widgets)

控件 作用 示例代码
QGroupBox 分组框 self.group = QtWidgets.QGroupBox("分组")
QTabWidget 选项卡面板 self.tab = QtWidgets.QTabWidget()
QScrollArea 可滚动区域 self.scroll = QtWidgets.QScrollArea()
QSplitter 可拖拽分隔 self.splitter = QtWidgets.QSplitter()

5. 数据类(Data Widgets)

控件 作用 示例代码
QTableWidget 表格 self.table = QtWidgets.QTableWidget(3, 2)
QTreeWidget 树形结构 self.tree = QtWidgets.QTreeWidget()
QListWidget 列表控件 self.list = QtWidgets.QListWidget()

6. 布局管理器(Layouts)

控件 作用 示例代码
QVBoxLayout 垂直布局 layout = QtWidgets.QVBoxLayout(self)
QHBoxLayout 水平布局 layout = QtWidgets.QHBoxLayout(self)
QGridLayout 网格布局 layout = QtWidgets.QGridLayout(self)
QFormLayout 表单布局 layout = QtWidgets.QFormLayout(self)

测试

import sys
from PySide6 import QtWidgets, QtCore

class Demo(QtWidgets.QWidget):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("控件演示")
        self.resize(400, 300)

        layout = QtWidgets.QVBoxLayout(self)

        # 换不同控件试试看
        widget = QtWidgets.QComboBox()
        widget.addItems(["选项1", "选项2", "选项3"])

        layout.addWidget(widget)

if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)
    win = Demo()
    win.show()
    sys.exit(app.exec())

最小框架

import sys

from PySide6 import QtCore, QtGui, QtWidgets


class MyWidget(QtWidgets.QWidget):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.setWindowTitle("空白测试模板")
        self.resize(800, 600)
        self.setup_ui()

    def setup_ui(self) -> None:
        """设置界面"""
        # 在此处编写设置UI的代码


if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)
    window = MyWidget()
    window.show()
    sys.exit(app.exec())

QtCore

概览

QtCore 提供 不依赖界面(非 GUI)的核心功能,主要包括:

  • 时间与定时器
  • 信号与槽(事件通信机制)
  • 基础数据类型(字符串、日期、时间、URL、文件路径等)
  • 多线程、定时任务
  • 事件循环
  • 国际化(翻译、编码)

换句话说:
👉 QtCore 负责逻辑和底层支持,QtWidgets 负责界面,QtGui 负责图形。

分类

1. 信号与槽(事件机制)

Qt 独特的机制,控件之间通信靠它完成。

  • **信号 (Signal)**:事件发生时发出通知
  • **槽 (Slot)**:接收信号的处理函数

示例:

from PySide6 import QtCore, QtWidgets
import sys

class Demo(QtWidgets.QWidget):
    def __init__(self):
        super().__init__()
        btn = QtWidgets.QPushButton("点我")
        btn.clicked.connect(self.say_hello)  # 信号 → 槽
        layout = QtWidgets.QVBoxLayout(self)
        layout.addWidget(btn)

    @QtCore.Slot()   # 声明这是一个槽函数(可选)
    def say_hello(self):
        print("Hello QtCore!")

app = QtWidgets.QApplication(sys.argv)
w = Demo()
w.show()
sys.exit(app.exec())

2. 时间与定时器

  • QTimer → 定时执行某个任务
  • QTime → 表示时间(时、分、秒)
  • QDate → 表示日期(年、月、日)
  • QDateTime → 日期 + 时间

示例(每秒打印一次时间):

from PySide6 import QtCore

def tick():
    print(QtCore.QTime.currentTime().toString())

timer = QtCore.QTimer()
timer.timeout.connect(tick)
timer.start(1000)  # 1000ms = 1秒

3. 核心数据类型

  • QStringListModel → 用于存储字符串列表,结合控件(如 QListView)使用
  • QPoint, QSize, QRect → 位置、大小、矩形区域
  • QUrl → URL 地址
  • QVariant → 通用数据类型包装

示例:

point = QtCore.QPoint(10, 20)
print(point.x(), point.y())  # 输出 (10, 20)

4. 文件与路径

  • QFile, QDir → 文件与目录操作
  • QFileInfo → 文件信息(大小、类型、路径等)
  • QStandardPaths → 获取系统标准路径(桌面、文档、下载目录等)

示例(获取桌面路径):

desktop = QtCore.QStandardPaths.writableLocation(QtCore.QStandardPaths.DesktopLocation)
print("桌面路径:", desktop)

5. 多线程

  • QThread → 线程基类
  • QRunnable + QThreadPool → 线程池机制
  • QMutex, QSemaphore → 线程同步

6. 其他常用类

  • QEventLoop → 事件循环
  • QObject → 所有 Qt 对象的基类(支持信号槽)
  • QCoreApplication → 非 GUI 应用的核心类(类似 QApplication 但没有界面)

测试

import sys
from PySide6 import QtCore, QtWidgets

class ClockWidget(QtWidgets.QWidget):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("时钟示例")
        self.resize(300, 100)

        self.label = QtWidgets.QLabel("", alignment=QtCore.Qt.AlignCenter)
        layout = QtWidgets.QVBoxLayout(self)
        layout.addWidget(self.label)

        # 每秒更新一次时间
        self.timer = QtCore.QTimer(self)
        self.timer.timeout.connect(self.update_time)
        self.timer.start(1000)
        self.update_time()

    def update_time(self):
        now = QtCore.QDateTime.currentDateTime().toString("yyyy-MM-dd hh:mm:ss")
        self.label.setText(now)

app = QtWidgets.QApplication(sys.argv)
w = ClockWidget()
w.show()
sys.exit(app.exec())

归纳

1️⃣ 核心基类

  • QObject → 所有 Qt 对象的基类(支持信号/槽、事件系统)
  • QCoreApplication → 非 GUI 程序入口(有事件循环,但没界面)
  • QEventLoop → 手动事件循环(等待某个操作完成)
  • QEvent → 事件基类(鼠标、键盘、窗口事件都继承它)

2️⃣ 信号与槽(事件机制)

  • pyqtSignal / Signal → 定义自定义信号
  • pyqtSlot / Slot → 声明槽函数(可选)
  • Qt → 一堆枚举(对齐方式、方向、快捷键修饰符等等)

3️⃣ 时间相关

  • QTimer → 定时器(周期性任务)
  • QTime → 只表示时间(时:分:秒)
  • QDate → 只表示日期(年-月-日)
  • QDateTime → 日期 + 时间

4️⃣ 文件与路径

  • QFile → 文件读写
  • QDir → 目录操作
  • QFileInfo → 文件信息(大小、路径、类型)
  • QStandardPaths → 获取系统路径(桌面、下载、文档)

5️⃣ 数据类型与模型

  • QPoint → 点(x,y)
  • QSize → 尺寸(宽,高)
  • QRect → 矩形(位置 + 尺寸)
  • QUrl → URL 地址
  • QByteArray → 字节数组(二进制数据)
  • QStringListModel → 字符串列表模型(可用于 QListView)
  • QVariant → 通用数据包装(Python 里很少直接用)

6️⃣ 线程与并发

  • QThread → 线程基类
  • QRunnable → 可运行任务
  • QThreadPool → 线程池
  • QMutex → 互斥锁
  • QSemaphore → 信号量
  • QFuture / QPromise(在 Qt6 更常用)→ 异步任务

7️⃣ 其他工具类

  • QLocale → 本地化信息(语言、货币、日期格式)
  • QTimerEvent → 定时器事件
  • QSettings → 配置文件存储(INI/注册表)
  • QCommandLineParser → 命令行参数解析
  • QResource → 内置资源系统(图片、QSS 打包到 exe 里)

🔑 总结

QtCore 就像 Qt 的内核工具箱,主要提供:

  • 程序框架:QObject、QCoreApplication、事件循环
  • 信号槽机制:Signal、Slot
  • 时间管理:QTimer、QDateTime
  • 文件路径:QFile、QDir、QStandardPaths
  • 基础数据类型:QPoint、QRect、QSize、QUrl
  • 多线程:QThread、QThreadPool
  • 其他实用工具:QSettings、QLocale


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 jungle8884@163.com

×

喜欢就点赞,疼爱就打赏