-
[PyQt5] 3. ClassPython/PyQt5 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가 됩니다.클래스는 아주 중요한 개념이기 때문에
혹시 잘 모르신다면 다른 글들을 참고하십시오.반응형