PyQt5와 QML을 사용하는 간단한 예제Qt/PyQt5 강좌2023. 12. 11. 20:28
Table of Contents
반응형
PyQt5와 QML을 사용하는 간단한 예제코드입니다.
2023. 12. 9 최초작성
QML을 사용하여 UI를 따로 분리할 수 있다는 것을 알면서도 사용을 꺼렸는데 이렇게 UI를 분리하는 것도 괜찮겠다 싶어 간단한 예제 코드로 시도해보았습니다.
실행하면 중앙에 버튼이 있는 윈도우가 보입니다.
버튼을 클릭할때마다 메시지 박스가 보이게 됩니다. 확인을 클릭하면 메시지 박스가 사라집니다.
코드는 UI를 정의한 main.qml 파일과 PyQt5 코드를 작성해놓은 main.py 파일로 구성됩니다.
main.qml
QML을 사용하여 윈도우를 생성하고 중앙에 버튼을 배치합니다. 버튼이 클릭되면, 파이썬 코드 파일 main.py에 정의된 mainWindow 클래스에 있는 showMessage() 함수가 호출됩니다.
import QtQuick 2.0 // Qt Quick 2.0 모듈을 임포트합니다. 기본적인 UI 요소와 기능을 제공합니다. import QtQuick.Controls 2.0 // Qt Quick Controls 2.0 모듈을 임포트합니다. 버튼과 같은 표준 컨트롤을 제공합니다. ApplicationWindow { // ApplicationWindow 요소는 최상위 윈도우를 생성합니다. title: "webnautes.tistory.com" // 윈도우의 제목을 설정합니다. width: 600 // 윈도우의 너비를 픽셀 단위로 설정합니다. height: 480 // 윈도우의 높이를 픽셀 단위로 설정합니다. visible: true // 윈도우가 보이도록 설정합니다. 기본값은 false입니다. Button { // Button을 추가합니다. id: button // 버튼의 고유 식별자입니다. text: "버튼을 누르세요." // 버튼에 표시될 텍스트입니다. anchors.centerIn: parent // 버튼을 부모 요소(여기서는 ApplicationWindow)의 중앙에 배치합니다. onClicked: mainWindow.showMessage() // 버튼이 클릭될 때 실행할 동작을 정의합니다. // 이 예제에서는 'mainWindow' 객체의 'showMessage' 함수를 호출합니다. } } |
main.py
import sys from PyQt5.QtWidgets import QApplication, QMessageBox from PyQt5.QtQml import QQmlApplicationEngine from PyQt5.QtCore import QObject, pyqtSlot class MainWindow(QObject): # QObject를 상속받는 MainWindow 클래스를 정의합니다. def __init__(self): super(MainWindow, self).__init__() # MainWindow의 생성자에서 부모 클래스의 생성자를 호출합니다. @pyqtSlot() # 슬롯 데코레이터를 사용하여 showMessage 함수를 Qt 슬롯으로 표시합니다. def showMessage(self): QMessageBox.information(None, "메시지", "버튼을 클릭하셨군요!") # 메시지 박스를 화면에 보여주는 showMessage 함수를 정의합니다. if __name__ == "__main__": # 현재 파이썬 코드를 실행할 때에만 아래 코드가 실행됩니다. app = QApplication(sys.argv) # QApplication 인스턴스를 생성합니다. engine = QQmlApplicationEngine() # QQmlApplicationEngine 인스턴스를 생성합니다. main_window = MainWindow() # MainWindow 인스턴스를 생성합니다. engine.rootContext().setContextProperty("mainWindow", main_window) # QML 컨텍스트에 mainWindow 객체를 추가합니다. engine.load("main.qml") # QML 파일을 불러옵니다. if not engine.rootObjects(): sys.exit(-1) # QML 엔진이 객체를 로드하지 못한 경우 프로그램을 종료합니다. sys.exit(app.exec_()) # 이벤트 루프를 시작하고 애플리케이션을 실행합니다. |
반응형
'Qt > PyQt5 강좌' 카테고리의 다른 글
PyQtGraph 다른 모니터로 윈도우 이동시 그래프가 깨지는 현상 해결 방법 (0) | 2024.02.21 |
---|---|
PyQt5 그래프 그리기 - PyQtGraph 예제 (14) | 2024.02.05 |
logging과 PyQt5를 사용하여 로그창 구현 (0) | 2023.10.22 |
PyQT5에서 slot이 thread-safe인지 테스트 해봤습니다 (0) | 2023.10.22 |
QApplication의 인스턴스를 생성할 때 sys.argv를 전달해야 하는 이유 (0) | 2023.10.22 |
시간날때마다 틈틈이 이것저것 해보며 블로그에 글을 남깁니다.
블로그의 문서는 종종 최신 버전으로 업데이트됩니다.
여유 시간이 날때 진행하는 거라 언제 진행될지는 알 수 없습니다.
영화,책, 생각등을 올리는 블로그도 운영하고 있습니다.
https://freewriting2024.tistory.com
제가 쓴 책도 한번 검토해보세요 ^^
@webnautes :: 멈춤보단 천천히라도
그렇게 천천히 걸으면서도 그렇게 빨리 앞으로 나갈 수 있다는 건.
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!