1. PySide와 PyQt란?
- PySide와 PyQt는 GUI 개발을 위한 Qt라이브러리 기반 Python라이브러리
- 두 라이브러리는 매우 유사한 API를 제공하므로, 한쪽을 학습하면 다른 쪽으로 쉽게 전환 가능
2. PySide와 PyQt의 주요 차이점
라이선스 | LGPL (상업용 및 오픈소스 가능) | GPL (상업용 사용 시 상업 라이선스 필요) |
공식 지원 | Qt 공식 지원 | 제3자 지원 (Riverbank Computing) |
기능 업데이트 | Qt 릴리스와 동기화 | Qt 업데이트 후 적용까지 약간의 시간 소요 |
- 결론: 상업적 프로젝트를 계획 중이라면, 라이선스 조건에 따라 PySide가 더 유리
3. PySide와 PyQt 설치
PySide 설치:
pip install PySide6
PyQt 설치:
pip install PyQt6
4. 간단한 GUI 애플리케이션 예제
PySide를 이용한 예제:
from PySide6.QtWidgets import QApplication, QLabel
import sys
app = QApplication(sys.argv)
label = QLabel("Hello, PySide!")
label.show()
sys.exit(app.exec())
PyQt를 이용한 예제:
from PyQt6.QtWidgets import QApplication, QLabel
import sys
app = QApplication(sys.argv)
label = QLabel("Hello, PyQt!")
label.show()
sys.exit(app.exec())
5. 주요 구성 요소
Qt 프레임워크는 다양한 GUI 구성 요소 제공
- QWidget: 모든 위젯의 기본 클래스.
- QMainWindow: 상태 표시줄, 메뉴 바, 툴바 등을 포함한 메인 창.
- QPushButton: 버튼 위젯.
- QLabel: 텍스트나 이미지를 표시하는 라벨.
- QLineEdit: 사용자 입력을 받는 단일 줄 텍스트 상자.
- QTableWidget: 테이블 형태의 위젯.
6. Designer 툴을 활용한 GUI 디자인
PySide와 PyQt는 모두 Qt Designer라는 시각적 GUI 디자인 툴과 호환됨. 이를 통해 코드를 작성하지 않고도 GUI를 설계할 수 있음.
Designer에서 UI 파일 생성:
- Qt Designer를 열고 필요한 GUI를 설계합니다.
- .ui 파일로 저장합니다.
PySide에서 UI 파일 사용:
from PySide6.QtWidgets import QApplication, QMainWindow
from PySide6.QtUiTools import QUiLoader
import sys
app = QApplication(sys.argv)
loader = QUiLoader()
window = loader.load("your_ui_file.ui", None)
window.show()
sys.exit(app.exec())
PyQt에서 UI 파일 사용:
from PyQt6.QtWidgets import QApplication, QMainWindow
from PyQt6.uic import loadUi
import sys
app = QApplication(sys.argv)
window = loadUi("your_ui_file.ui")
window.show()
sys.exit(app.exec())
7. 이벤트 처리
PySide와 PyQt에서는 이벤트를 처리하기 위해 **시그널(Signal)**과 슬롯(Slot) 메커니즘을 사용.
버튼 클릭 이벤트 예제:
from PySide6.QtWidgets import QApplication, QPushButton
import sys
def on_button_clicked():
print("Button clicked!")
app = QApplication(sys.argv)
button = QPushButton("Click Me")
button.clicked.connect(on_button_clicked)
button.show()
sys.exit(app.exec())
8. PySide에서 QThread 사용 예제
GUI 애플리케이션에서 백그라운드 작업을 실행하려면 QThread 사용:
from PySide6.QtCore import QThread, Signal
from PySide6.QtWidgets import QApplication, QMainWindow, QPushButton, QLabel
import sys
import time
class WorkerThread(QThread):
update_signal = Signal(str)
def run(self):
for i in range(5):
time.sleep(1) # 작업 실행
self.update_signal.emit(f"Count: {i + 1}")
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("QThread Example")
self.setGeometry(100, 100, 300, 200)
self.label = QLabel("Press the button to start", self)
self.label.setGeometry(50, 50, 200, 30)
self.button = QPushButton("Start Thread", self)
self.button.setGeometry(50, 100, 200, 30)
self.button.clicked.connect(self.start_thread)
self.thread = WorkerThread()
self.thread.update_signal.connect(self.update_label)
def start_thread(self):
if not self.thread.isRunning():
self.thread.start()
def update_label(self, text):
self.label.setText(text)
if __name__ == "__main__":
app = QApplication(sys.argv)
window = MainWindow()
window.show()
sys.exit(app.exec())
9. PyQt를 이용한 ROS 통신
ROS 통신용으로는 PySide보다 PyQt가 더 많이 쓰이는듯
https://medium.com/@anubhavdograa/pyqt-based-gui-for-ros-applications-part-1-5096ad536449
'Skills' 카테고리의 다른 글
로봇 모델링: URDF, SDF (0) | 2024.12.08 |
---|---|
Docker + VScode 사용법 (5분 내로 핵심만) (0) | 2024.12.05 |
Github 사용법 (5분 내로 핵심만) (0) | 2024.12.04 |