PySide6

Форк
0
/
1_signals_custom.py 
70 строк · 4.1 Кб
1
"""
2
Пример создания пользовательского сигнала с использованием класса Signal
3
из модуля PySide6.QtCore.
4
"""
5
import sys
6

7
from PySide6.QtCore import Signal
8
from PySide6.QtWidgets import QApplication, QMainWindow
9

10
"""
11
Модуль sys нужен для доступа к аргументам командной строки. Если использование аргументов
12
командной строки не предполагается, то импорт можно не выполнять. При этом, при создании
13
приложения в класс QApplication([]) в качестве аргумента передается пустой список.
14
Импорт из модуля PySide6.QtWidgets класса для управления приложением QApplication и
15
класса основного окна QMainWindow.
16
Импорт из модуля PySide6.QtCore класса сигнала Signal.
17
"""
18

19

20
class MainWindow(QMainWindow):
21
    """
22
    Класс главного окна приложения от супер класса главных окон
23
    """
24
    message = Signal(str)  # создание экземпляра класса сигнала с указанием, что сигнал передает строку
25
    value = Signal(int, str, int)  # создание экземпляра класса сигнала с указанием,
26
    # что сигнал передает три разных значения разных типов
27
    another = Signal(list)  # создание экземпляра класса сигнала с указанием, что сигнал передает список
28
    onemore = Signal(dict)  # создание экземпляра класса сигнала с указанием, что сигнал передает словарь
29
    anything = Signal(object)  # создание экземпляра класса сигнала с указанием, что сигнал может передать любой объект
30

31
    def __init__(self):
32
        """
33
        Конструктор главного окна приложения
34
        """
35
        QMainWindow.__init__(self)  # явный вызов конструктора родительского класса
36
        self.message.connect(self.custom_slot)  # создание сигнала с привязкой метода ресивера
37
        # с помощью метода .connect()
38
        self.value.connect(self.custom_slot)
39
        self.another.connect(self.custom_slot)
40
        self.onemore.connect(self.custom_slot)
41
        self.anything.connect(self.custom_slot)
42
        self.message.emit('my message')  # передача сигнала c данными c помощью метода .emit()
43
        self.value.emit(23, 'abc', 1)
44
        self.another.emit([1, 2, 3, 4, 5])
45
        self.onemore.emit({'a': 2, 'b': 7})
46
        self.anything.emit(1223)
47

48
    def custom_slot(self, *args: object) -> None:
49
        """
50
        Метод ресивер (слот) для приема данных сигнала
51
        :param args: object - любой объект
52
        :return: None
53
        """
54
        print(args)
55

56

57
def main() -> None:
58
    """
59
    Функция запуска кода верхнего уровня приложения
60
    :return: None
61
    """
62
    app = QApplication(sys.argv)  # создание экземпляра класса основного цикла главного окна приложения
63
    window = MainWindow()  # создание экземпляра класса главного окна приложения
64
    window.show()  # вызов метода главного окна, разрешающего его показ (по умолчанию окно скрыто)
65
    app.exec()  # запуска основного цикла главного окна приложения
66

67

68
if __name__ == '__main__':  # данная конструкция предотвращает запуск кода верхнего уровня
69
    # при импортировании данного файла как модуля
70
    main()
71

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.