Python/파이선과 친해지기

[Python] - Python과 예쁘게 친해지기-QWidget과 Signal&Slot

## myqt.py

from PyQt5.QtWidgets import QApplication, QWidget
import sys

if __name__ == "__main__" :
    app = QApplication(sys.argv)
    first_window = QWidget()
    first_window.show()
    app.exec_()

우리의 첫 프로그램 화면이다. 눈으로 보이게 된 화면이 물론 멋지긴 하지만, 밋밋하다. 빈 도화지만으로 보고 예술작품이라고 할 수는 없으니 말이다. 프로그램이라 하면 자고로 버튼 / 글자 / 그림 등 콘텐츠가 있어야 되지 않겠는가, 이러한 요소를 위젯(Widget)이라고 부른다. 특히 우리는 Pyqt5를 배우고 있으니 용어를 Q-Widget이라고 하자(한국이었으면 K-Widget이었겠네)


QWidget

QWidget은  키보드 / 마우스 / 휠 등의 여러 이벤트를 수신하고 자기 자신이 그래픽 요소를 가지는 User Interface의 기본 요소이다. 우리가 프로그램에서 보는 여러 가지 화면 요소들은 모두 요소다. 심지어 우리의 첫 코드에 QMainWIndow또한 위젯을 상속받았다. 아래는 Widget들중 아주 일부인 QLabel, QPushButton, QSlider이다.

<여러가지 위젯들, QLabel, QPushButton, QSlider>

 


Slot & Signal

위젯은 User Interface요소이다. 그 말은 즉슨 사용자와 상호작용한다는 이야기이다. 사용자의 입력이나 행동 우리가 "Event"라고 부르는 것은 저번 포스팅에서 알아보았다.

2021.08.29 - [Python/파이선과 친해지기] - [Python] - Python과 예쁘게 친해지기-QApplication과 EVENTLOOP

 

[Python] - Python과 예쁘게 친해지기-QApplication과 EVENTLOOP

아직 우리는 기초단계에 있기 때문에 지난 글을 읽고 오지 않으셨다면 꼭 읽고 와주시기를 바란다. 2021.08.27 - [Python/파이선과 친해지기] - [Python] - Python과 예쁘게 친해지기-PyQt [Python] - Python과 예.

tutoreducto.tistory.com

이러한 Event는 Signal로 발송이 되고, 발송된 Siganl은 그 Signal과 형식(파라미터)이 맞는 Slot에 연결할 수 있다. 코드를 통해서 실용적으로 알아보자. 예를 들면 버튼을 누른다는 행위(사용자의 행위)로 프로그램에서 무엇인가를 출력하는 예제는 다음과 같다.

## myqt.py

from PyQt5.QtWidgets import QApplication, QWidget, QLabel, QPushButton, QSlider, QHBoxLayout
import sys

class my_window(QWidget) :

    def __init__(self) :
        super().__init__()
        box = QHBoxLayout()
        btn = QPushButton("버튼") 
        btn.clicked.connect(self.print_function)	### btn의 clicked 시그널이 발송된다.
        box.addWidget(btn)
        
        self.setLayout(box)

	### print_function은 btn clicked시그널 발송 시 동작
    def print_function(self) :
        print("무야호")
        

if __name__ == "__main__" :
    app = QApplication(sys.argv)
    first_window = my_window()
    first_window.show()
    app.exec_()

<무야호 SIgnal과 SLot의 예제>

위와 같다. 각 시그널은 일정한 데이터를 실어서 발송할 수 있다.(예를 들면 slider의 경우 현재 slider값 등) QWidget별로 사용할 수 있는 시그널 슬롯이 정말 다양하니 앞으로 Widget강의를 통하여 알아보도록 하자


이번 시간을 마지막으로 PyQt5에서 알아야 할 기본적인 개념을 다 알아보았다. 깊게 들어가면 복잡 시려지지만 이 정도의 개념만으로도 충분히 나만의 GUI 프로그램을 만들 수 있다. 다음 시간부터는 WIdget들을 하나하나 알아보도록 하자