본문 바로가기
코딩log/알고리즘 트레이딩 시스템 구축

PyQt5 연결 import 오류 해결 및 PyQt5 익히기 -2

by 벨크 2022. 12. 15.
반응형

PyQt5 모듈을 이용하여 기본적인 GUI 코딩을 해봤으므로, 본격적으로 PyQt5를 익혀보도록 하겠습니다.

 

먼저, PyQt5를 이용해 GUI 프로그램이 어떤 프로세스로 흘러가는지 알아봅시다.

앞서 작성했던 프로그램은 Qt 프로그래밍의 가장 기본적인 코드입니다.

Qt 를 이용하여 GUI 프로그램을 개발하기 위해서는 필수적으로 QApplication 이라는 인스턴스를 하나 생성해야합니다. QApplication 이라는 인스턴스가 존재하지 않으면, Qt 프로그램은 동작을 하지 않습니다.

 

QApplication 인스턴스를 생성하였다면, GUI 화면을 구성합니다. 그리고 exec_() 함수를 호출하는데요.

exec_() 함수는 유저가 종료 입력을 하기 전까지 어플리케이션을 실행합니다.

 

이는 GUI 프로그램의 특징이라고 할 수 있습니다. GUI프로그램은 사용자가 종료하기 전까지 계속 프로그램이 실행 중인 상태입니다. 계속 프로그램이 구동 중이면서 사용자의 이벤트를 기다리고 있습니다.

 

어떤 책들에서는 이를 이벤트 루프(event loop)라고 표현을 하기도 합니다. 조금 더 개발자스럽게 표현을 한다면, 이벤트를 리스닝 중이라고도 표현 할 수도 있을거 같습니다.

 

기본적인 GUI 코드를 이해했다면, 조금 더 복잡한 GUI 프로그램을 한 번 코드를 짜보겠습니다.


 

먼저 MainWindow 를 하나 생성하고, 메인 윈도우에 메세지 박스를 출력하는 버튼 하나, 프로그램 종료 버튼 하나를 추가해 보겠습니다.

 

MainWindow는 QMainWindow 라는 위젯을 상속 받아 생성하고, Constructure에서 윈도우의 크기를 설정 해줍니다. 

 

class baseWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        self.setGeometry(300, 300, 300, 400)
 
 

다음은 QPushButton 이라는 위젯을 이용해 버튼을 하나 생성하고, 버튼을 클릭했을 때 실행되는 이벤트 함수를 연결해줍니다.

 
        btn1 = QPushButton("Click", self)
        btn1.move(20, 20)
        btn1.clicked.connect(self.btn1_click)
 
 

버튼을 하나 더 생성하고 종료 이벤트 연결해 줍니다.

 

        btn2 = QPushButton("Quit", self)
        btn2.move(20, 60)
        btn2.clicked.connect(QCoreApplication.instance().quit)

 

 

QPushButton 위젯의 move 함수를 이용해 메인 윈도우상에 위치를 각각 20,20 / 20. 60 에 위치시켰습니다.

그리고 버튼1에 연결시킨 이벤트 함수 btn1_click 을 클래스의 method 로 구현합니다.

 

    def btn1_click(self):
        QMessageBox.about(self, "message", "button 1 Clicked!!")
 
 

자, 이렇게 GUI 어플리케이션의 구성을 마쳤으면, 이제 GUI 프로그램을 실행시켜야겠죠?

위에 설명했던 내용처럼 QApplication 인스턴스를 생성하고, 우리가 구성한 GUI 어플리케이션(baseWindow) 인스턴스도 생성하여 화면에 보여줍니다.

 

    app = QApplication(sys.argv)
    window = baseWindow()
    window.show()
    app.exec_()
 
 

이제 실행을 해볼까요?

성공적으로 실행이 되었다!

메인 윈도우 안에 버튼 두 개가 성공적으로 나타난 것이 보입니다! 👏👏👏👏

 

클릭 버튼을 눌렀을 때, 메세지 박스도 정상적으로 나타나는 것을 볼 수 있습니다.

QMessageBox 를 이용한 이벤트


이렇게 오늘은 조금 더 본격적으로 PyQt 에 익숙해져 보기위해 코드를 좀 짜봤습니다.

 

GUI 어플리케이션 코딩에 조금 더 관심이 있으신 분들은, 파이썬 위키를 읽어보시면 도움이 될겁니다.

 

  • QLabel
  • QComboBox
  • QCheckBox
  • QRadioButton
  • QPushButton

등등.. 다양한 위젯들의 가이드를 보실 수 있습니다.(링크)

 

 

다음 번에는 PyQt를 이용해 키움증권 API를 연동해보겠습니다.

반응형

댓글