산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Industrial programming >> python

종합 PyQt5 튜토리얼: 파이썬으로 전문 GUI 애플리케이션 구축하기

PyQt란 무엇인가?

PyQt는 크로스 플랫폼 C++ 라이브러리인 Qt 프레임워크의 파이썬 바인딩으로, Windows, macOS, Linux, Android, iOS, 라즈베리파이 등에서 네이티브 GUI 애플리케이션을 만드는 데 사용됩니다. 바인딩은 Riverbank Computing(영국)에서 유지보수하며, Qt 자체는 The Qt Company(핀란드)에서 개발합니다. PyQt는 파이썬 개발자에게 Qt의 풍부한 위젯, 네트워킹, 데이터베이스, 3D, 멀티미디어 기능에 접근할 수 있게 합니다.

이 튜토리얼에서 배울 내용:

PyQt5의 주요 특징

PyQt5는 600개 이상의 클래스를 노출하며 다음을 다룹니다:

이 기능들로 개발자는 복잡하고 고성능의 데스크톱 및 임베디드 애플리케이션을 구축할 수 있습니다. LG, 메르세데스-벤츠, AMD, 파나소닉, 하만 등 주요 기업이 UI 스택으로 Qt를 활용합니다.

PyQt 버전

Riverbank Computing은 두 가지 주요 바인딩을 제공합니다:

또한 PyQt3D는 실시간 3D 렌더링과 시뮬레이션에 유용한 Qt3D 프레임워크의 파이썬 바인딩을 제공합니다.

PyQt5 설치

아래 두 가지 일반적인 설치 방법을 설명합니다. 컴파일된 C++ 바이너리를 포함하고 긴 빌드 과정을 피할 수 있는 휠 패키지 사용을 권장합니다.

방법 1: 휠 패키지로 설치 (권장)

  1. 선호하는 터미널이나 명령 프롬프트 열기
  2. pip install PyQt5 실행하여 휠 다운로드(약 50MB)
  3. 설치가 성공적으로 완료되었는지 확인

Windows 예시:

종합 PyQt5 튜토리얼: 파이썬으로 전문 GUI 애플리케이션 구축하기
pip install PyQt5

설치 후 PyQt5.QtWidgets를 임포트하여 애플리케이션 구축 시작.

방법 2: 소스에서 빌드

소스 빌드는 C++ 코드 컴파일이 필요해 더 복잡합니다. 맞춤 수정이 필요하거나 본인 플랫폼용 휠이 없을 때만 필요합니다.

PyQt5 프로그래밍 기초

아래는 "Guru99"라는 제목의 300x300 창을 여는 최소 예제입니다. 각 줄에 주석을 달았습니다.

import sys
from PyQt5.QtWidgets import QApplication, QWidget

if __name__ == "__main__":
    app = QApplication(sys.argv)
    w = QWidget()
    w.resize(300, 300)
    w.setWindowTitle("Guru99")
    w.show()
    sys.exit(app.exec_())

설명:

인터랙티비티 추가

다음 예제는 라벨, 버튼, 버튼 클릭 시 나타나는 메시지 박스를 추가합니다. 시그널과 슬롯, Qt 이벤트 시스템의 핵심을 보여줍니다.

import sys
from PyQt5.QtWidgets import QApplication, QWidget, QLabel, QPushButton, QMessageBox

def dialog():
    mbox = QMessageBox()
    mbox.setText("Your allegiance has been noted")
    mbox.setDetailedText("You are now a disciple and subject of the all-knowing Guru")
    mbox.setStandardButtons(QMessageBox.Ok | QMessageBox.Cancel)
    mbox.exec_()

if __name__ == "__main__":
    app = QApplication(sys.argv)
    w = QWidget()
    w.resize(300, 300)
    w.setWindowTitle("Guru99")
    label = QLabel("Behold the Guru, Guru99", w)
    label.move(100, 130)
    btn = QPushButton("Beheld", w)
    btn.move(110, 150)
    btn.clicked.connect(dialog)
    w.show()
    sys.exit(app.exec_())

버튼 클릭 시 dialog()가 호출되어 모달 QMessageBox를 생성합니다.

핵심 컴포넌트와 위젯

PyQt5 아키텍처는 여러 모듈로 구성됩니다. 이 계층을 이해하면 필요한 것만 임포트할 수 있습니다.

모듈 개요

자주 쓰는 위젯

레이아웃 관리

move()와 resize()로 위젯을 수동 배치하는 대신, Qt는 창 크기에 따라 위젯을 자동 배치하는 레이아웃 매니저를 제공합니다.

박스 레이아웃 (HBox & VBox)

QHBoxLayout은 위젯을 수평으로, QVBoxLayout은 수직으로 배치합니다.

import sys
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QHBoxLayout, QVBoxLayout

app = QApplication([])
win = QWidget()
win.setWindowTitle("Musketeers")
btn1 = QPushButton("Athos")
btn2 = QPushButton("Porthos")
btn3 = QPushButton("Aramis")
hbox = QHBoxLayout(win)
hbox.addWidget(btn1)
hbox.addWidget(btn2)
hbox.addWidget(btn3)
win.show()
app.exec_()

QHBoxLayout을 QVBoxLayout으로 바꾸면 버튼이 수직으로 쌓입니다.

그리드 레이아웃

위젯을 2차원 그리드에 배치합니다. addWidget() 메서드는 행과 열 인덱스, 선택적 행/열 병합 인자를 받습니다.

import sys
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QGridLayout

app = QApplication([])
win = QWidget()
layout = QGridLayout(win)
for i in range(3):
    for j in range(3):
        layout.addWidget(QPushButton(f"Button {i},{j}"), i, j)
win.show()
app.exec_()

커스텀 테마와 스타일

PyQt5는 네이티브 테마와 커스텀 스타일시트를 지원합니다.

내장 테마

app.setStyle("Fusion") 또는 다른 사용 가능한 스타일로 애플리케이션 스타일 설정.

app = QApplication([])
app.setStyle("Fusion")

팔레트 커스터마이징

QPalette로 위젯 색상을 프로그래밍 방식으로 수정.

from PyQt5.QtGui import QPalette
from PyQt5.QtCore import Qt
palette = QPalette()
palette.setColor(QPalette.ButtonText, Qt.black)
palette.setColor(QPalette.Window, Qt.black)
palette.setColor(QPalette.Button, Qt.gray)
app.setPalette(palette)

Qt 스타일 시트 (CSS 스타일)

고급 스타일링을 위해 위젯이나 전체 애플리케이션에 스타일시트 직접 적용.

btn.setStyleSheet("background-color: #4CAF50; color: white; padding: 5px;")

핵심 요약

python

  1. C# 컬렉션(Collections) 마스터하기: 실전 예제로 배우는 유연한 데이터 관리
  2. Python str.count() 마스터하기: 문자 및 부분문자열 개수 세기 예제
  3. Python format() 문자열 마스터하기: 명확한 예제로 완전 정복
  4. Python String.find() 메서드 마스터하기: 문법, 예제, 대안 비교
  5. 파이썬 람다 함수 마스터하기: 실용 예제 & 모범 사례
  6. 파이썬 round() 함수 완전 정복: 실용 예제로 이해하기
  7. 파이썬 map() 함수 마스터하기: 문법, 예제, 모범 사례
  8. 파이썬 timeit()으로 실행 시간 측정하기: 실용 예제
  9. 파이썬 collections.Counter: 효율적 카운팅, 업데이트, 산술 연산
  10. 파이썬 type()과 isinstance() 이해하기: 실전 예제