※ 업무하면서 습득한 내용들을 정리해 놓은 포스팅입니다 :P 추가로 궁금하신 점은 댓글로 남겨주시고 필요한 자료 있으면 요청주세요! 잘못된 내용이 있으면 고쳐주시면 감사하겠습니다. 자료 퍼가실 때는 출처 남겨주세요!
ο 목차
※ 코드 보는 방법 참고
ㅇ 달러 기호($)가 있는 경우 -> 리눅스 터미널에서 CLI 명령어 입력
ㅇ "=#" 기호가 있는 경우 -> psql 쉘에서 명령어 입력
ㅇ 꺽쇠가 하나 있는 경우(>) -> 윈도우 명령 프롬프트(cmd)에서 명령어 입력
ㅇ 꺽쇠가 세개 있는 경우(>>>) -> python 쉘에서 명령어 입력
PyQt에 대해 이해한 내용을 정리하고 저와 같은 다른 분들께 도움을 드리고자 작성하는 포스팅입니다 :)
1. 개념 정리
1) PyQt란?
파이썬 플러그인을 바탕으로 개발된 GUI 개발 툴킷 라이브러리
(즉, 파이썬으로 GUI 프로그래밍을 하기 위한 라이브러리)
2) 어플리케이션(QApplication)이란?
- 만들어진 GUI 프로그램에서 사용자 상호 작용(클릭, 마우스 움직임 등)시 발생하는 이벤트를 처리하기 위한 이벤트 루프를 생성하고 프로그램에서 명시된대로 이벤트를 적절하기 처리하기 위한 QtWidgets 모듈의 클래스
※ 하나의 GUI 프로그램은 반드시 하나의 QApplication* 객체를 가지고 있어야 함.
- 예시) 어플리케이션 인스턴스 생성 예시
app = QApplication(리스트_인자)
3) 위젯(QWidget, QPushButton, QLabel 등)이란?
- GUI 프로그램에서 윈도우와 사용자 인터페이스를 생성하기 위한 QtWidgets 모듈의 클래스
- 기본적으로 모든 위젯은 윈도우를 생성하고 기본값으로 숨겨져 있음(코드 실행시 화면에 윈도우 출력 X)
- 기본적으로 윈도우는 최상위 위젯이기 때문에 다른 윈도우나 레이아웃과 중첩되지 않음
(즉, 하나의 위젯 당 하나의 윈도우 출력)
- 예시) OS별 윈도우 예시
- 예시) 사용자 인터페이스
2. PyQt 기본 동작 프로세스
1) QApplication 객체 생성
<코드 참조>
from PyQt5.QtWidgets import QApplication
app = QApplication(리스트_인자)
- QApplication 클래스를 사용해 app 이라는 인스턴스 생성하기
- 특별히 전달할 리스트 인자가 없다면 빈 리스트([])를 넘겨주거나 sys.argv(파일 경로) 값 넘겨주기
※ sys.argv 를 넘겨줄 경우 sys 모듈 import 필요
2) QWidget 객체 생성
- 여러 종류의 QWidget 중 하나를 골라 객체 생성하기
※ 위젯의 종류에는 QPushButton, QLabel, QCheckBox, QRadioButton, QComboBox 등이 있으며 위젯의 종류 및 특징에 대해서는 별도 포스팅 예정
- 기본적으로 각각의 위젯은 하나의 윈도우를 생성하며 서로 겹쳐지지 않고 그 자체로 최상위 위젯이 됨
- 객체 생성 방법) 위젯으로 객체를 생성하기 위해서는 위젯 클래스로부터 파생된 서브 클래스를 만들어 사용
<코드 참조 - 위젯 클래스의 서브 클래스 생성 코드>
from PyQt5.QtWidgets import QPushButton
class MyWindow(QPushButton) :
def __init__(self):
super(MyWindow, self).__init__()
self.initUI()
def initUI(self) :
self.btn = QPushButton(self)
self.btn.setText('Test Button')
<코드 참조 - 서브 클래스의 인스턴스 생성 코드>
mw = Mywindow()
3) 이벤트 루프 시작
- Qt의 '시그널 & 슬롯' 매커니즘을 처리하기 위한 이벤트 루프 생성 및 실행하기
※ 시그널(signal) : Qt의 객체에서 사용자 인터페이스 변경 혹은 동작이 감지되는 경우 이에 대한 알람으로 발생되는 신호
※ 슬롯(slot) : 특정 시그널이 발생되는 경우 호출되는 함수를 의미
- QApplication 클래스를 사용하여 이벤트 루프 생성 및 실행
<코드 참조 - 이벤트 루프 생성 코드>
app = QApplication([])
<코드 참조 - 이벤트 루프 실행 코드>
sys.exit(app.exec_())
※ exec 명령을 통해 프로세스 종료시까지 이벤트 루프를 계속 실행시키며 중간 중간 발생하는 이벤트를 처리
※ 하위 버전(파이썬2.x, Qt4 ...) 와의 호환을 위해 exec_를 사용하며 Qt5만 사용하는 경우 exec()만 사용해도 무방함
3. 전체 코드 참고
- PushButton을 포함한 위젯 생성 코드
import sys
from PyQt5.QtWidgets import QApplication, QPushButton
class MyWindow(QPushButton):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.btn = QPushButton(self)
self.btn.setText("Test Button")
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = MyWindow()
ex.show() // 디폴트로 숨겨져 있는 윈도우를 화면에 출력하는 함수
sys.exit(app.exec_())
4. 결과 예시
- Test Button을 포함하는 윈도우가 생성됨
- 시그널에 대한 슬롯을 만들지 않았기 때문에 지금은 Test Button을 클릭해도 아무런 변화가 없음
※ 좋아요와 구독은 큰 힘이 됩니다. 감사합니다.
'파이썬 개발 > Qypt5' 카테고리의 다른 글
Pyqt5 - gui 멈춤, gui freezing 해소, QThread 사용, multithreading, Long-running task offloading (0) | 2022.09.08 |
---|---|
PyQt5 - QFileDialog.getOpenFileName 파일 선택후 파일명 가져와서 라인 에디터에 입력하기 (0) | 2022.08.09 |
PyQt5 - QLabel(레이블) 글자 잘림 현상 해결 (0) | 2022.08.08 |
PyQt5 - 메인 윈도우에서 다른 윈도우 열기 (0) | 2022.08.03 |
PyQt5 - RadioButton 누르면 라벨(Label) 출력하기 (0) | 2022.06.08 |
댓글