본문 바로가기
<개인공부> - IT/[Python]

Day 1. PyQt5 사용해보기 - 빈 윈도우 띄우기 그리고 이벤트 루프

by Aggies '19 2021. 2. 4.
반응형

나는 회사에 입사 후 현장에 사용될 스위치 컨피그를 만들어주는 GUI Application을 만들어서 배포했다.

기존에는 txt 파일로 저장된 내용을 Mangement IP와 일부 Vlan 정보만 바꾸어 사용하다보니 Human Error가 많을 수 밖에 없었다. 예를 들면, spanning-tree의 vlan range를 오설정 한다던가 trunking vlan 오설정 등.

 

그래서 그런 Human Error를 최소화 하고자 PyQt5를 이용해서 간단한 Application을 만들었다. GUI 프로그래밍에 대한 탄탄한 지식이 있었던 건 아니었고 구글링으로 원하는 Application을 만들었고 현재도 동료들의 Feedback을 통해서 지속적으로 업데이트하고 있다. 잘 디자인된 프로그래밍이라고 하기엔 다소 어렵고 돌아만 가는 토이 App이다 보니 PyQt5에 대한 공부를 해보면 어떨까 하는 생각으로 해당 포스트를 시작한다.

 

내가 참고한 책은 "Create GUI Applications with Python & Qt5: The hands-on guide to making apps with Python"


from PyQt5.QtWidgets import QApplication, QWidget
# Only needed for access to command line arguments
import sys
# You need one (and only one) QApplication instance per application.
# Pass in sys.argv to allow command line arguments for your app.
# If you know you won't use command line arguments QApplication([]) works too.
app = QApplication(sys.argv)
# Create a Qt widget, which will be our window.
window = QWidget()
window.show() # IMPORTANT!!!!! Windows are hidden by default.
# Start the event loop.
app.exec_()
# Your application won't reach here until you exit and the event
# loop has stopped.

참고한 책의 가장 처음 소스코드이다. 빈 윈도우를 띄워주는 소스 코드이다. 

 

나는 가장 마지막 라인 app.exec()와 app.exec_()의 차이는 무엇인지 궁금해서 검색을 조금 해보았다.

결론만 먼저 이야기하면 Python3에서는 차이가 없는 동일한 함수이다. 단, Python2.7 에서 exec는 reserved keyword였기에 PyQt를 개발하면서 _ (underscore)를 붙여주었던 것 뿐. 하지만 Python3에서는 exec가 reserved keyword에서 빠지게 됨에 따라 exec()와 exec_()는 동일하게 생각하면 된다. 2)  

 

다양한 위젯에 대한 사용법을 설명해 주기 전 이 책에서는 간단한 event loop에 대한 개념을 설명한다. Application의 객체는 event loop을 갖게 된다. event란 키보드의 특정 키를 누르거나 혹은 떼거나 마우스를 클릭하는 것과 같은 user의 action을 event라고 한다. 이 각각의 event는 event queue라고 하는 곳에 놓이며 각 event handler에 의해서 처리된다. 

쉽게 설명하면 내가 만든 application은 결국 event loop을 돌면서 각 event가 처리될 때까지 기다리고 있는 것이라 생각하면 된다. 글 솜씨가 없어서 직관적인 이해를 돕기위한 책의 그림을 캡춰하였다. 

 

1. Reference book: "Create GUI Applications with Python & Qt5: The hands-on guide to making apps with Python"

2. Reference site: Reference site: stackoverflow.com/questions/22610720/should-i-use-app-exec-or-app-exec-in-my-pyqt-application

반응형