GUI 제작 Tool: PySide & PyQt

crunch-code ㅣ 2024. 12. 14. 23:35

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 파일 생성:

  1. Qt Designer를 열고 필요한 GUI를 설계합니다.
  2. .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