파이썬 ui 프로그래밍 실습 1장에서 작성한 코드를 객체지향 코드로 변경을 해보도록 하겠습니다.

1장 링크 : https://blp1209.tistory.com/100

 

파이썬 ui 프로그래밍 실습 feat. PyQT5, PyQT-tools(designer) 1장

파이썬으로 개발을 하다보니 윈도우나 os 의 GUI 에서 프로그래밍 하는거에 재미가 들려 공부를 해보았다. 그 내용을 포스팅 해보고 자 한다. 준비 tool : - VS CODE(개발 편집프로그램) - python 3.9 이하

blp1209.tistory.com

 

1장의 내용을 객체지향 코드로 전환 하면 아래와 같이 변경이 가능 합니다.

#pyqt5_example_re.py

# 명령행 인수를 GUI에 전달할 수 있도록 sys를 import 한다.
import sys  
# PyQt5 패키지에서 QtWidgets 모듈에 있는 QApplication 및 QWidget 클래스를 import 한다.
from PyQt5.QtWidgets import QApplication, QWidget  

# QWidget을 상속하는 클래스를 만든다.
class GUI(QWidget):
    def __init__(self) :
        super().__init__()
        # 윈도우를 생성하고 슈퍼클래스를 초기화 한다.
        self.initUI()

    def initUI(self):
        # 타이틀을 변경 합니다.
        self.setWindowTitle('PyQt5 GUI')

# 셀프 테스팅 코드를 추가 한다.
if __name__ == '__main__':
    # 추가 명령행 이수를 전달할 수 있도록 sys.argv로 전달해 QApplication 클래스의 인스턴스를 생성 한다.
    # 이 인스턴스를 app 변수에 저장 한다.
    # 이렇게 하면 애플리케이션이 만들어 진다.
    app = QApplication(sys.argv)
    # QWidget 클래스의 인스턴스를 만들고 GUI가 된다.
    # 이 인스턴스를 gui라는 로컬 변수에 저장 한다.
    gui = GUI()

    # GUI를 볼 수 있도록 gui 클래스 인스턴스의 show 메서드를 호출한다.
    gui.show()
    # 어블리케이션 클래스 인스턴스에서 exec_ 메서드를 호출해 애플리케이션을 실행한다.
    # 발생할 수 있는 예외 사항을 파악하기 위해 호출을 sys.exit 내에 래핑 한다.
    # 에외가 발생하면 파이썬 애플리 케이션이 정상적으로 종료 되고 충돌하지 않는다.
    sys.exit(app.exec_())

 

 

추가로 QMainWindow 상속을 해 보겠습니다.

이전 소스와 다른 내용은 QWidget을 import 하지 않고 QMainWindow 를 import하여 크기 조정 한 창을 출력 할 수 있다.

#pyqt5_example_re.py

# 명령행 인수를 GUI에 전달할 수 있도록 sys를 import 한다.
import sys  
# PyQt5 패키지에서 QtWidgets 모듈에 있는 QApplication 및 QMainWindow 클래스를 import 한다.
from PyQt5.QtWidgets import QApplication, QMainWindow

# QMainWindow을 상속하는 클래스를 만든다.
class GUI(QMainWindow):
    def __init__(self) :
        super().__init__()
        # 윈도우를 생성하고 슈퍼클래스를 초기화 한다.
        self.initUI()

    def initUI(self):
        # 타이틀을 변경 합니다.
        self.setWindowTitle('PyQt5 GUI')
        self.resize(400, 300)

# 셀프 테스팅 코드를 추가 한다.
if __name__ == '__main__':
    # 추가 명령행 이수를 전달할 수 있도록 sys.argv로 전달해 QApplication 클래스의 인스턴스를 생성 한다.
    # 이 인스턴스를 app 변수에 저장 한다.
    # 이렇게 하면 애플리케이션이 만들어 진다.
    app = QApplication(sys.argv)
    # QWidget 클래스의 인스턴스를 만들고 GUI가 된다.
    # 이 인스턴스를 gui라는 로컬 변수에 저장 한다.
    gui = GUI()

    # GUI를 볼 수 있도록 gui 클래스 인스턴스의 show 메서드를 호출한다.
    gui.show()
    # 어블리케이션 클래스 인스턴스에서 exec_ 메서드를 호출해 애플리케이션을 실행한다.
    # 발생할 수 있는 예외 사항을 파악하기 위해 호출을 sys.exit 내에 래핑 한다.
    # 에외가 발생하면 파이썬 애플리 케이션이 정상적으로 종료 되고 충돌하지 않는다.
    sys.exit(app.exec_())

 

상태창 위젯을 추가해 보자.

소스에서 상태창을 추가하는 할수를 정의 하고 호출 하면 왼쪽 하단에 상태창이 이전과 다르게 발생 한다.

#pyqt5_example_re.py

# 명령행 인수를 GUI에 전달할 수 있도록 sys를 import 한다.
import sys  
# PyQt5 패키지에서 QtWidgets 모듈에 있는 QApplication 및 QMainWindow 클래스를 import 한다.
from PyQt5.QtWidgets import QApplication, QMainWindow

# QMainWindow을 상속하는 클래스를 만든다.
class GUI(QMainWindow):
    def __init__(self) :
        super().__init__()
        # 윈도우를 생성하고 슈퍼클래스를 초기화 한다.
        self.initUI()

    def initUI(self):
        # 타이틀을 변경 합니다.
        self.setWindowTitle('PyQt5 GUI')
        self.resize(400, 300)
        self.add_widgets()  # 상태창 호출

    # 상태창 위젯을 호출 하는 함수 정의
    def add_widgets(self):
        self.statusBar().showMessage('Text in statusbar')

# 셀프 테스팅 코드를 추가 한다.
if __name__ == '__main__':
    # 추가 명령행 이수를 전달할 수 있도록 sys.argv로 전달해 QApplication 클래스의 인스턴스를 생성 한다.
    # 이 인스턴스를 app 변수에 저장 한다.
    # 이렇게 하면 애플리케이션이 만들어 진다.
    app = QApplication(sys.argv)
    # QWidget 클래스의 인스턴스를 만들고 GUI가 된다.
    # 이 인스턴스를 gui라는 로컬 변수에 저장 한다.
    gui = GUI()

    # GUI를 볼 수 있도록 gui 클래스 인스턴스의 show 메서드를 호출한다.
    gui.show()
    # 어블리케이션 클래스 인스턴스에서 exec_ 메서드를 호출해 애플리케이션을 실행한다.
    # 발생할 수 있는 예외 사항을 파악하기 위해 호출을 sys.exit 내에 래핑 한다.
    # 에외가 발생하면 파이썬 애플리 케이션이 정상적으로 종료 되고 충돌하지 않는다.
    sys.exit(app.exec_())

메뉴바를 추가해 보자

QAction 을 새로 import 하고, 새로 생성 했던 add_widgets 함수에 메뉴바를 추가하는 코딩을 추가 하였다.
작성 하고 실행 하면 메뉴바가 생성 된 것을 확인 할 수 있다.
메뉴 모음의 인스턴스를 만든 후 addMenu 메서드를 사용해 메뉴를 반들었다.
QAction 클래스를 사용해 메뉴 항목ㅇㄹ 생성 한 다음 addAction 메서드를 사용해 이 메뉴 항목을 메뉴에 추가했고,
new_action 변수를 사용해 setStatusTip을 호출 했다.
File > New 를 클릭, 하면 상태바에 New File 이 보일 것 이다.
 
#pyqt5_example_re.py

# 명령행 인수를 GUI에 전달할 수 있도록 sys를 import 한다.
import sys  
# PyQt5 패키지에서 QtWidgets 모듈에 있는 QApplication 및 QMainWindow 클래스를 import 한다.
from PyQt5.QtWidgets import QApplication, QMainWindow, QAction

# QMainWindow을 상속하는 클래스를 만든다.
class GUI(QMainWindow):
    def __init__(self) :
        super().__init__()
        # 윈도우를 생성하고 슈퍼클래스를 초기화 한다.
        self.initUI()

    def initUI(self):
        # 타이틀을 변경 합니다.
        self.setWindowTitle('PyQt5 GUI')
        self.resize(400, 300)
        self.add_widgets()  # 상태창 호출

    # 상태창 위젯을 호출 하는 함수 정의
    def add_widgets(self):
        self.statusBar().showMessage('Text in statusbar')
        menubar = self.menuBar()
        file_menu = menubar.addMenu('File')

        new_action = QAction('New', self)
        file_menu.addAction(new_action)
        new_action.setStatusTip('New File')

# 셀프 테스팅 코드를 추가 한다.
if __name__ == '__main__':
    # 추가 명령행 이수를 전달할 수 있도록 sys.argv로 전달해 QApplication 클래스의 인스턴스를 생성 한다.
    # 이 인스턴스를 app 변수에 저장 한다.
    # 이렇게 하면 애플리케이션이 만들어 진다.
    app = QApplication(sys.argv)
    # QWidget 클래스의 인스턴스를 만들고 GUI가 된다.
    # 이 인스턴스를 gui라는 로컬 변수에 저장 한다.
    gui = GUI()

    # GUI를 볼 수 있도록 gui 클래스 인스턴스의 show 메서드를 호출한다.
    gui.show()
    # 어블리케이션 클래스 인스턴스에서 exec_ 메서드를 호출해 애플리케이션을 실행한다.
    # 발생할 수 있는 예외 사항을 파악하기 위해 호출을 sys.exit 내에 래핑 한다.
    # 에외가 발생하면 파이썬 애플리 케이션이 정상적으로 종료 되고 충돌하지 않는다.
    sys.exit(app.exec_())

Posted by 블로그하는프로그래머
,