나는 회사에 입사 후 현장에 사용될 스위치 컨피그를 만들어주는 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
'<개인공부> - IT > [Python]' 카테고리의 다른 글
Day 3. PyQt5 (QLabel) (0) | 2021.02.09 |
---|---|
Day 2. PyQt5 (Signal and Slot) (0) | 2021.02.09 |
복수개의 값 리스트에서 지우기 (None, multiple data remove in list) (0) | 2020.09.11 |
Cisco ISE ERS API (Device Update) (2) | 2020.08.26 |
Basic usage exchangelib (MS Exchange) (0) | 2020.08.01 |