본문 바로가기

프로그래밍

직접코딩으로 PyQt 윈도우를 구성해보자

보통 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_()