보통 PyQt QApplication를 인스턴스화 하고 이벤트 루프를 만들어서 UI와의 상호작용을 준비한다.
이제 상호작용할 UI를 만들어 보자. 이전에 클릭보다 더 다양하게 만들어서 쓸 수 있게 판을 깔고 시작하자.
PyQt의 판을 위해 QMainWindow을 상속받은 클래스를 만들어서 이용하자.
import sys
from PyQt5.QtWidgets import *
class TestWindow(QMainWindow):
def __init__(self):
super().__init__()
if __name__ == "__main__":
app = QApplication(sys.argv)
app.exec_()
부모 클래스의 생성자를 super().__init__()으로
반드시 실행하도록 작성해야한다.
이대로 실행하면 아무일도 일어나지 않는다.
단순히 상속을 받았을 뿐 그려낼 요소를 어떤것도 실행하지 않았기 때문이다.
이제 창이름도 꾸미고 버튼도 넣어보고 버튼에 함수도 연결하는 동작을 작성해보자.
# 화면에 그릴 내용 설정함수
def init_ui(self):
self.setWindowTitle('Test Window') #부모 클래스인 QMainWindow가 갖고 있는 함수이다.
test_btn = QPushButton('Test Click', self)
test_btn.move(30, 40) # 버튼이 배치될 위치 설정
test_btn.click(self.clicked_test_btn)
# test_btn클릭시 동작
def clicked_test_btn(self):
# QMessageBox는 메시지용 박스로 about을 통해 박스 속성 설정과 열기를 내부적으로 함께 수행한다.
QMessageBox.about(self, '테스트 버튼 눌림 알림', '눌렸다')
이 두 함수를 클래스 하위로 넣고, init_ui()를 TestWindow함수의 __init__() 에 넣자
def __init__(self):
super().__init__()
self.init_ui()
마지막으로
현재 작성중인 소스 실행 시 동작에 UI관련 동작으로 추가하자.
if __name__ == "__main__":
app = QApplication(sys.argv)
test_window = TestWindow()
test_window.show() # QMainWindow의 함수
app.exec_()
'프로그래밍' 카테고리의 다른 글
QtDesigner로 작성한 ui파일 로드 후 이벤트 주입 및 다루기 (0) | 2021.01.01 |
---|---|
QtDesigner로 만든 .ui파일을 .py로 바꾸지 않고 사용하기 (0) | 2020.12.30 |
python dictionary의 키만 복사 사용 (0) | 2020.12.22 |
pandas의 DataFrame개체 다루기 (0) | 2020.12.21 |
pandas의 Series 개체의 인덱싱값 지정 (0) | 2020.12.21 |