Python/PyQt5

[PyQt5] 3. Class

컴닥 2021. 5. 18. 22:30
반응형

이런 코드를 쓸 수도 있지만
조금만 프로젝트가 복잡해져도 힘들어지기 때문에
대부분 클래스를 이용해서 GUI를 만듭니다.

from PyQt5.QtWidgets import QApplication, QMainWindow

app = QApplication([])
my_window = QMainWindow()
my_window.setWindowTitle('My App')
my_window.setGeometry(100, 100, 300, 300)
my_window.show()
app.exec_()

https://github.com/pycrawling/pyqt5_study/blob/main/pyqt5_study_03-1.py

 

클래스를 만들고 최상위 위젯 QWidget, QDialog, QMainWindow 등을 상속합시다. 
상속할 때 부모 클래스의 초기화 루틴을 실행해 주는 것을 잊으면 안 됩니다. 

from PyQt5.QtWidgets import QApplication, QMainWindow


class MyWindow(QMainWindow):  # QMainWindow 를 상속합니다.
    def __init__(self):
        super().__init__()  # 부모 클래스의 초기화 메서드를 가져와 실행합니다.
        self.setWindowTitle('My App')
        self.setGeometry(100, 100, 300, 300)


app = QApplication([])
my_window = MyWindow()
my_window.show()
app.exec_()

https://github.com/pycrawling/pyqt5_study/blob/main/pyqt5_study_03-2.py

 

여기에 버튼을 추가합시다. 

from PyQt5.QtWidgets import QApplication, QMainWindow, QPushButton

app = QApplication([])

my_window = QMainWindow()
my_window.setWindowTitle('My App')
my_window.setGeometry(100, 100, 300, 300)

# QPushButton 의 첫번째 인수는 버튼의 Title 입니다.
# 두번째 인수는 상위 위젯을 의미합니다. 
# 버튼은 my_window 의 내부에 있게됩니다.
button1 = QPushButton('Click me', my_window)
button1.move(10, 10)

my_window.show()
app.exec_()

https://github.com/pycrawling/pyqt5_study/blob/main/pyqt5_study_03-3.py

 

클래스로 정리해 봅니다. 

from PyQt5.QtWidgets import QApplication, QMainWindow, QPushButton


class MyWindow(QMainWindow):
    def __init__(self):
        super(MyWindow, self).__init__()
        self.setWindowTitle('My App')
        self.setGeometry(100, 100, 300, 300)

        button1 = QPushButton('Click me', self)
        button1.move(10, 10)


app = QApplication([])
my_window = MyWindow()
my_window.show()
app.exec_()

https://github.com/pycrawling/pyqt5_study/blob/main/pyqt5_study_03-4.py

클래스를 사용하는 것이 더 깔끔하고 직관적인 것 같습니다. 
꼬리표(두 번째 인수) self가 아직 있습니다. 
차후에 layout을 이용하면 self까지 생략할 수 있습니다. 

self는 객체(인스턴스)가 되었을 때 객체 자신을 의미합니다. 

여러 번 객체가 될 수도 있지만
여기서는 my_window = MyWindow()로 한 번 객체가 되었네요. 

MyWindow 클래스에서 my_window 객체가 생성되었고
이때 self는 my_window가 됩니다. 

클래스는 아주 중요한 개념이기 때문에
혹시 잘 모르신다면 다른 글들을 참고하십시오. 

반응형