PyQt5 Hello World

새로운 프로그래밍 언어를 시작할 때

Hello World 를 출력해보는 것은

커니핸과 리치의 'C 프로그래밍 언어' 이후

전통과도 같습니다.

 

그냥 의미없이 하는 전통이 아니라

테스트를 완료함으로써

프레임워크의 기본 구조에 대한

인사이트를 얻을 수 있습니다.

 

Hello World 테스트는 파이썬 같이

5초만에 시작할 수 있는 언어가 있는 반면

어떤 프레임워크는 세팅 시간만

몇시간 걸리는 경우도 있습니다.

 

최근의 GUI 프레임워크들도

그렇게 세팅이 어렵지는 않지만

그렇다고 이해가 아주 쉽지는 않습니다.

 

이럴 때 Hello World 예제를 테스트

해보는 것이 도움이 됩니다.

 

1. QWidget 예제

 

가장 기본이 되는 예제입니다.

 

QWidget 을 상속한

클래스로 윈도우를 만들어서

메인 루프에 돌립니다.

 

GUI니까 레이블을 붙여서

Hello World 를 출력할 수 있습니다.

 

이 때 사용한 레이아웃은

QGridLayout 으로 바둑판같은 레이아웃입니다

 

아래에는 if __name__ == "__main__":

구문이 있는데요. 이 파이썬 파일에서

시작하는 경우 __main__ 이 됩니다.

 

앱에서 여러개의 파일을 사용하는 경우

main 이 아닌 경우 실행을 하지 않도록 하기 위함입니다.

from PyQt5.QtWidgets import *
import sys

class PyApp(QWidget):
    def __init__(self):
        QWidget.__init__(self)
        self.setWindowTitle("Hello PyQt5")
        self.resize(400, 300)

        grid = QGridLayout()
        self.setLayout(grid)

        label1 = QLabel("Hello World!")
        grid.addWidget(label1, 0, 0)

        label2 = QLabel("Welcome to PyQt5")
        grid.addWidget(label2, 0, 1)

        self.show()

if __name__ == "__main__":
    app = QApplication(sys.argv)
    screen = PyApp()
    sys.exit(app.exec_())

PyQt5 Window

 

2. QWidget 클래스 없이

클래스가 이해하는데 거슬리면

클래스 없이 윈도우를 만들 수도 있습니다.

 

__name__ 체크하는 내용도 빼도 되지만

이것은 좋은 습관이기 때문에

그냥 내버려 두는게 좋습니다.

 

클래스 없이 보면 잘 보이는게 있습니다.

우선 QApplication 에 시스템 변수를 넣는 부분

어떻게 동작하는지 사용자는 알 수 없지만

운영체제에 현재 디렉토리를

인수로 전달하는 것을 알 수 있습니다.

 

다음 QWidget 은 위짓 인스턴스입니다.

여기서 윈도우라는 객체를 정의합니다.

프레임, 레이블, 버튼 등은 모두

이 객체와 관련되 있습니다.

 

다음 레이블을 생성하는데

QWidget 인스턴스를 받습니다.

윈도우에 레이블을 추가함을 의미합니다.

 

항상 screen.show() 처럼

보이도록 설정을 해야 윈도우가 보입니다.

 

sys.exit 는 프로세스를 종료하는 call 입니다.

이 안의 인수는 app.exec_() 로

QApplication 의 인스턴스를 실행합니다.

 

PyQt5를 구성하는 것은

QApplication 과 QWidget 의

두 개로 나누어져 있다는 부분에 주의합니다.

 

아직은 QApplication 에 신경쓸 필요는 없습니다.

 

대부분 시간에 QWidget 부분을 코딩 하게 될 겁니다.

 

from PyQt5 import QtWidgets
import sys

if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)
    screen = QtWidgets.QWidget()
    screen.resize(320, 240)

    label = QtWidgets.QLabel(screen)
    label.setText("Hello World")
    label.move(100, 50)

    screen.show()
    sys.exit(app.exec_())

PyQt5 Window

 

그 밖에 사항

윈도우 프레임을 생성하기 위해서

자체 레이아웃이 있는 QMainWindow 을

QWidget 대신 사용하기도 합니다.

QWindow 도 사용할 수 있고요.

 

프레임워크 안에서도

윈도우를 생성하는 방법은 여러가지가 있습니다.

 

결과는 윈도우를 생성하는 것 이겠지만

코딩 방식은 약간씩 달라질 수 있습니다.

공유하기

facebook twitter kakaoTalk kakaostory naver band