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 Функция также может быть определена внутри функции-члена.
Явное обозначение его как слота с помощью декоратора @Slot() позволяет избежать дополнительной проверки типов во время выполнения.
Использование декоратора @Slot() может помочь системе метаобъектов Qt более точно обрабатывать соединения сигналов и слотов, уменьшая потенциальные ошибки.
Декоратор @Slot() обеспечивает четкое выражение намерения, сообщая другим разработчикам, что эта функция предназначена для использования в качестве части механизма сигналов и слотов.
Если вы не используете декоратор @Slot(), Qt добавит метод к метаобъекту (QMetaObject) класса при создании соединения, что может добавить некоторые накладные расходы во время выполнения.
"""
print('button pressed', time.time())
if __name__ == '__main__':
app = QApplication([])
window = MyWindow()
window.show()
app.exec()