PySide6 GUI 编程(4):使用 Slot 装饰器定义槽函数

2024-05-20 19:42:43 浏览数 (1)

Slot函数的另一种写法

代码语言:python代码运行次数:0复制
import time

from PySide6.QtCore import Slot
from PySide6.QtWidgets import QApplication, QMainWindow, QPushButton


@Slot()
def onPressed():
    print('按钮被按下', time.time())


@Slot()
def onReleased():
    print('按钮被释放', time.time())


@Slot()
def onClicked():
    print('按钮被点击(动作已完成)', time.time())


class MyWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        button = QPushButton('按钮', self)
        """
        在Qt(包括PySide6)中,在同一个线程中的连接,当一个信号连接到多个槽函数时,槽函数的执行顺序通常是按照它们被连接到信号上的顺序
        """
        button.pressed.connect(onPressed)
        button.pressed.connect(self.after_pressed)
        button.released.connect(onReleased)
        button.clicked.connect(onClicked)

    @Slot()
    def after_pressed(self):
        """
            Slot Function也可以被定义在成员函数里面

            使用@Slot()装饰器可以显式地将其标记为槽可以避免在运行时进行额外的类型检查
            使用@Slot()装饰器可以帮助Qt的元对象系统更准确地处理信号和槽的连接,减少潜在的错误
            @Slot()装饰器提供了清晰的意图表达,让其他开发者知道这个函数是被设计为信号和槽机制的一部分

            如果不使用@Slot()装饰器,Qt在创建连接时会将方法添加到类的元对象(QMetaObject)中,这可能会增加一些运行时开销
        """
        print('button pressed', time.time())


if __name__ == '__main__':
    app = QApplication([])
    window = MyWindow()
    window.show()
    app.exec()
使用 Slot 装饰器定义的槽函数使用 Slot 装饰器定义的槽函数

0 人点赞