티스토리 뷰

Python/PyQt5

PyQt5: 창 띄우기

editor752 2019. 11. 5. 19:49

이 글은 Codetorial의 PyQt5, 초보자를 위한 Python GUI 프로그래밍-PyQt5 등을 학습하는 과정을 기록한 것이다. 강좌 자체는 해당 사이트를 참고하기 바란다.

아래는 이름이 MyApp이며, 너비 400, 높이 200인 윈도우 하나를 화면에 띄우는 소스 코드이다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
import sys
from PyQt5.QtWidgets import QApplication, QWidget
 
 
class MyApp(QWidget):
 
    def __init__(self, parent=None):
        super().__init__()
 
        self.initUI()
 
    
    def initUI(self):
 
        #  setWindowTitle() 메서드는 타이틀바에 나타나는 창의 제목을 설정
        self.setWindowTitle('MyApp')
        #  resize() 메서드는 위젯의 크기를 너비 400px, 높이 200px로 조절
        self.resize(400200)
        #  show() 메서드는 위젯을 스크린에 보여줌.
        self.show()
 
 
if __name__ == '__main__':
 
    #  모든 PyQt5 어플리케이션은 어플리케이션 객체를 생성해야 함.
    app = QApplication(sys.argv)
    ex = MyApp()
    sys.exit(app.exec_())
 
cs

각 라인의 의미는 각주를 참고하면 된다. 그런데 26, 27 라인이 어떻게 상호 동작하는지 모르겠다. PyQt5에서 어플리케이션을 만들기이 위해서는 그 인스턴트를 생성해야 한다. 그래서 QApplication의 인스턴트 app이 생성되었다. 이 어플리케이션의 종료도 app.exec_()와 같이 app이 사용되었음이 확인된다. 그런데 특별한 지정이 없이도 ex를 호출하는 것만으로 app과 함께 동작하게 되는 것일까? app은 윈도우를 생성하기 위한 일종의 틀이고 ex는 틀의 첫번째 바탕이라고 생각했다. app은 액자의 틀, ex는 캔버스 정도로 비유되는 것이라 막연히 이해했는데 그런 게 아닌 것일까?

추가(November 7, 2019)

PyQt에서 윈도우의 생성과 종료, 그리고 이벤트 처리 등과 관계된 내용이 잘 정리된 문서를 찾았다. 이 문서를 꼼꼼하게 읽어 보면 위의 질문에 답을 찾을 수 있다.

간단히 요약하면, PyQt로 프로그래밍을 작성할 때는 일반적으로 다음의 두 가지가 필요하다.

  1. QApplication 클래스의 인스턴스

  2. 이벤트 루프

1번은 QApplication을 인스턴스를 생성하면서 해결이 되며 2번은 app.exec_()를 통해서 해결된다. 위에서는 프로그램 종료를 위해 사용된 것으로 오해한 것이다. 이들의 관계는 아래의 그림과 같다.

이벤트 루프


댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2025/02   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28
글 보관함
02-13 06:51