본문 바로가기
Python Library/PySide

[PySide] 신호 및 슬롯

by goatlab 2022. 5. 23.
728x90
반응형
SMALL

신호 및 슬롯

 

1. 신호

 

신호는 어떤 일이 발생 했을 때 위젯에서 내보낸 알림이다. 버튼을 누르는 것부터 입력 상자의 텍스트가 변경되는 것, 창의 텍스트가 변경되는 것까지 무엇이든 될 수 있다. 많은 신호는 사용자 작업에 의해 시작되지만 이것은 규칙이 아니다.

 

어떤 일이 발생했음을 알리는 것 외에도 신호는 데이터를 보내서 발생한 일에 대한 추가 컨텍스트를 제공할 수도 있다.

 

2. 슬롯

 

슬롯은 Qt가 신호 수신기에 사용하는 이름이다. Python에서는 신호를 연결하기만 하면 애플리케이션의 모든 함수 (또는 메서드)를 슬롯으로 사용할 수 니다. 신호가 데이터를 보내면 수신 기능도 해당 데이터를 수신한다. 많은 Qt 위젯에는 자체 내장 슬롯이 있다. 즉, Qt 위젯을 직접 연결할 수 있다.

 

QPushButton

 

실행 버튼을 클릭하면 "Clicked!"라는 텍스트가 표시된다.

 

import sys
from PySide6.QtWidgets import QApplication, QMainWindow, QPushButton

class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()

        self.setWindowTitle("My App")

        button = QPushButton("Press Me!")
        button.setCheckable(True)
        button.clicked.connect(self.the_button_was_clicked)

        # Set the central widget of the Window.
        self.setCentralWidget(button)

    def the_button_was_clicked(self):
        print("Clicked!")

app = QApplication(sys.argv)

window = MainWindow()
window.show()

app.exec_()

 

데이터 수신

 

실행 버튼을 누르면 선택된 것으로 강조 표시된다. 다시 누르면 해제된다. 

 

class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()

        self.setWindowTitle("My App")

        button = QPushButton("Press Me!")
        button.setCheckable(True)
        button.clicked.connect(self.the_button_was_clicked)
        button.clicked.connect(self.the_button_was_toggled)

        self.setCentralWidget(button)

    def the_button_was_clicked(self):
        print("Clicked!")

    def the_button_was_toggled(self, checked):
        print("Checked?", checked)

 

데이터 저장

 

종종 위젯의 현재 상태 를 Python 변수에 저장하는 것이 유용하다. 이를 통해 다른 Python 변수와 마찬가지로 원래 위젯에 액세스하지 않고도 값으로 작업할 수 있다. 이러한 값을 개별 변수로 저장하거나 원하는 경우 사전을 사용할 수 있다.

 

class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()

        self.button_is_checked = True

        self.setWindowTitle("My App")

        button = QPushButton("Press Me!")
        button.setCheckable(True)
        button.clicked.connect(self.the_button_was_toggled)
        button.setChecked(self.button_is_checked)

        self.setCentralWidget(button)

    def the_button_was_toggled(self, checked):
        self.button_is_checked = checked

        print(self.button_is_checked)
728x90
반응형
LIST

'Python Library > PySide' 카테고리의 다른 글

[PySide] 이벤트  (0) 2022.06.13
[PySide] 위젯 연결하기  (0) 2022.06.13
[PySide] 인터페이스 변경  (0) 2022.06.13
[PySide] 창 및 위젯 크기 조정  (0) 2022.05.23
PySide  (0) 2022.05.23