프로그래밍/PyQt5 GUI

2. 창 띄우기

디아블로 2021. 7. 21. 16:40

2-1 예제: ex1

import sys
from PyQt5.QtWidgets import QApplication, QWidget


class MyApp(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        self.setWindowTitle("My First Application")
        self.move(300, 300)
        self.resize(400, 200)
        self.show()


if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = MyApp()
    sys.exit(app.exec_())

2-2 설명

import sys
from PyQt5.QtWidgets import QApplication, QWidget
  • 기본적인 UI 구성요소 모듈에서 QApplication, QWidget 모듈을 불러옵니다.
  • QtWidgets 모듈에 대한 자세한 설명은 QtWidgets 공식 문서에서 확인할 수 있습니다.
self.setWindowTitle("My First Application")
self.move(300, 300)
self.resize(400, 200)
self.show()
  • 여기서 self는 MyApp 객체의 QWidget을 말합니다.
  • setWindowTitle() 메서드는 타이블바에 나타나는 창의 제목을 설정합니다.
  • move() 메서드는 위젯을 스크린의 x=300px, y=300px의 위치로 이동시킵니다.
  • resize() 메서드는 위젯의 크기를 width=400px, height=200px로 조절합니다.
  • show() 메서드는 위젯을 스크린에 보여줍니다.
if __name__ == '__main__':
  • '__name__'은 현재 모듈의 이름이 저장되는 내장 변수입니다.
  • 만약 'moduleA.py'라는 코드를 import 해서 예제 코드를 수행하면 __name__ 은 'moduleA'가 됩니다. 그렇지 않고 코드를 직접 실행한다면 __name__ 은 '__main__' 이 됩니다. 따라서 이 한 줄의 코드를 통해 프로그램이 직접 실행되는지 혹은 모듈을 통해 실행되는지를 확인합니다.
app = QApplication(sys.argv)
  • PyQt5를 이용한 모든 프로그램은 반드시 QApplication 객체를 생성해야 합니다.
  • 해당 객체의 인자는 현재 소스코드 파일에 대한 경로를 담고 있는 파이썬 리스트를 클래스를 전달합니다.
  • print(sys.argv) 해보면 ['C:\PyProject\test01\main.py'] 를 출력합니다. 즉 현재 소스코드 경로 리스트를 출력합니다.
  • app = QApplication(['C:\PyProject\test01\main.py']) 처럼 QApplicaton 의 생성자의 인자로 현재 실행 파일의 경로를 리스트로 담아서 넣어주기만 하면 똑같이 동작합니다.
app.exec_()

QApplication 객체의 exec_메서드를 호출하여 이벤트 루프를 시작합니다. 이벤트 루프가 시작되면 GUI 프로그램은 사용자가 '닫기' 버튼을 누를 때 까지 종료하지 않고 계속 실행됩니다.

2-3 결과