PyQt5 예제를 포함한 튜토리얼: 생성 Python Qt를 사용한 GUI

⚡ 스마트 요약

PyQt는 Python 이 라이브러리는 크로스 플랫폼 Qt 위젯 툴킷용 바인딩으로, 개발자가 네이티브 데스크톱 GUI를 구축할 수 있도록 해줍니다. 600개 이상의 위젯을 지원합니다. C++ 창, 버튼, 레이아웃, 신호, 슬롯 및 테마를 다루는 클래스 Windows, macOS및 Linux.

  • 🔘 PyQt란 무엇인가요? A Python Qt에 대한 바인딩 C++ 리버뱅크 컴퓨팅에서 유지 관리하는 프레임워크입니다.
  • ☑️ 버전 : PyQt4는 Qt 4.x 및 5.x 버전과 호환되며, PyQt5는 Qt 5.x 시리즈만을 대상으로 합니다.
  • 설치: pip 패키지 관리자는 단 하나의 명령으로 wheel 파일에서 PyQt5를 설치합니다.
  • 🧪 첫 번째 앱: QApplication과 QWidget은 화면에 기본 창을 생성하고 표시합니다.
  • 🛠️ Signals와 슬롯: 위젯 이벤트는 다음과 연결되는 신호를 발생시킵니다. Python 슬롯 기능.
  • 🤖 AI 지원 가능: PyQt는 머신러닝 모델을 실행하고 시각화하는 데스크톱 프런트엔드를 구축하는 데 사용됩니다.

PyQt5 튜토리얼

아래 섹션에서는 PyQt의 기초부터 설치, 핵심 위젯, 레이아웃, 테마에 이르기까지 실행 가능한 예제를 제공합니다.

PyQt란 무엇인가요?

파이큐트 하는 Python 오픈소스 위젯 툴킷인 Qt의 바인딩으로, Qt는 크로스 플랫폼 애플리케이션 개발 프레임워크로도 사용됩니다. Qt는 인기 있는 툴킷입니다. C++ 주요 데스크톱, 모바일 및 임베디드 플랫폼용 GUI 애플리케이션 작성을 위한 프레임워크입니다(리눅스를 지원합니다). Windows, macOS, Android, iOS, 라즈베리 파이 등).

PyQt는 영국에 본사를 둔 Riverbank Computing이라는 회사에서 개발 및 유지 관리하는 무료 소프트웨어이며, Qt는 핀란드 회사인 The Qt Company에서 개발했습니다.

PyQt의 특징

PyQt의 중요한 기능은 다음과 같습니다.

PyQt는 다음과 같은 다양한 기능을 다루는 600개 이상의 클래스로 구성되어 있습니다.

  • 그래픽 사용자 인터페이스
  • SQL 데이터베이스
  • 웹 툴킷
  • XML 처리
  • 네트워킹

이러한 기능들을 조합하여 고급 사용자 인터페이스는 물론 독립형 애플리케이션도 만들 수 있습니다. LG, 메르세데스, AMD, 파나소닉, 하만 등 다양한 산업 분야의 많은 주요 기업들이 Qt를 사용하고 있습니다.

PyQt 버전

PyQt는 PyQt4와 PyQt5 두 가지 버전으로 제공됩니다. PyQt4는 Qt 프레임워크의 4.x 및 5.x 버전을 바인딩하는 데 필요한 연결 코드를 제공하는 반면, PyQt5는 5.x 버전만 지원합니다. 따라서 PyQt5는 이전 버전의 사용되지 않는 모듈과 하위 호환되지 않습니다. 이 PyQt GUI 튜토리얼에서는 예제를 보여주기 위해 PyQt5를 사용합니다. 이 두 버전 외에도 Riverbank Computing은 PyQt3D도 제공합니다. Python Qt3D 프레임워크용 바인딩입니다. Qt3D는 2D/3D 렌더링을 지원하는 실시간 시뮬레이션 시스템을 구축하는 데 사용되는 애플리케이션 프레임워크입니다.

PyQt5를 설치하는 방법

이 PyQt5 튜토리얼에서는 PyQt를 설치하는 두 가지 방법을 살펴보겠습니다.

  • 휠 파일 사용
  • 소스에서 빌드 및 설치

Qt(큐트 발음)는 복잡한 시스템이며 PyQt 코드베이스에는 컴파일된 코드가 포함되어 있습니다. C++ Python 내부 코드가 복잡하기 때문에 다른 배포판에 비해 소스 코드에서 빌드하고 설치하는 과정이 복잡합니다. Python 라이브러리가 필요하지만, 휠을 사용하면 PyQt5를 쉽게 설치할 수 있습니다.

바퀴를 이용한 설치

휠은 새로운 표준입니다. Python 패키징 및 배포 형식입니다. 간단히 말해서, 휠은 특별한 이름과 . 파일 확장자. 바퀴는 pip를 사용하여 설치할 수 있습니다(Python의 패키지 관리자)는 최신 버전에 기본적으로 포함되어 있습니다. Python.

그래서, 당신이 가지고 있다면 Python 3.4 이상이 설치되어 있으면 이미 pip가 있습니다. 그러나 이전 버전을 사용하는 경우 Python계속 진행하기 전에 pip를 다운로드하고 설치해야 합니다. 다음 링크에서 설치 방법을 확인할 수 있습니다. https://pypi.org/project/pip/.

PyQt5를 설치하려면 다음 단계를 따르세요.

단계 1) 명령 프롬프트를 엽니다.
명령 프롬프트 또는 PowerShell을 엽니다. Windows 기계.

PyQt5 설치

단계 2) 다음을 입력하세요.

 pip install PyQt5

단계 3) 설치 완료.
이 PyQt5 튜토리얼의 이 단계에서는 PyQt5 whl 패키지(약 50MB)를 다운로드하여 시스템에 설치합니다.

PyQt5 설치

또는 다음을 다운로드할 수도 있습니다. Windows 해당 버전의 바이너리 Python 컴퓨터에 설치되어 있어야합니다.

완료되면 이 PyQt5 튜토리얼의 다음 섹션으로 진행하여 첫 번째 GUI 앱을 작성하세요.

기본 PyQt Concepts 및 프로그램

이제 컴퓨터에 PyQt5를 성공적으로 설치했으므로 코드를 작성할 준비가 되었습니다. Python GUI 애플리케이션.

이 PyQt5 튜토리얼에서는 화면에 빈 창을 표시하는 간단한 앱부터 시작해 보겠습니다.

시동을 걸어보세요 Python IDLE 다음을 입력합니다.

1 프로그램

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_())

파일을 app.py로 저장하세요(파일 이름은 상관없습니다). 그런 다음 F5 키를 눌러 프로그램을 실행하세요. 또는 저장한 파일을 더블 클릭하여 실행할 수도 있습니다. 모든 단계를 제대로 따라했다면, 다음과 같은 제목의 새 창이 열릴 것입니다. Guru아래와 같이 99입니다.

기본 PyQt Concepts

훌륭해요! 잘 작동하네요. 대단한 건 아니지만 기본을 익히기에는 충분합니다. 이제 이 PyQt 튜토리얼에서 프로그램의 각 줄이 어떤 역할을 하는지 자세히 살펴보겠습니다.

from PyQt5.QtWidgets import QApplication, QWidget

이 명령문은 GUI를 생성하는 데 필요한 모든 모듈을 현재 네임스페이스로 가져옵니다. QtWidgets 모듈에는 이 과정에서 사용할 주요 위젯이 모두 포함되어 있습니다. Python Qt 튜토리얼.

app = QApplication(sys.argv)

여기서는 QApplication 클래스의 객체를 생성합니다. 이 단계는 PyQt5에 필수입니다. 모든 UI 앱은 앱에 대한 일종의 진입점으로 QApplication 인스턴스를 생성해야 합니다. 생성하지 않으면 오류가 표시됩니다.

sys.argv는 셸을 통해 애플리케이션을 시작할 때 또는 인터페이스를 자동화하는 동안 애플리케이션에 전달할 수 있는 명령줄 매개변수 목록입니다.

이 PyQt5 예제에서는 QApplication에 인수를 전달하지 않았습니다. 따라서 아래 코드로 대체하면 sys 모듈을 가져올 필요조차 없습니다.

app = QApplication([])
w = QWidget()

다음으로, QWidget 클래스의 객체를 만듭니다. QWidget은 Qt의 모든 UI 객체의 기본 클래스이며, 앱에서 보는 모든 것이 사실상 위젯입니다. 여기에는 대화 상자, 텍스트, 버튼, 막대 등이 포함됩니다. 복잡한 사용자 인터페이스를 디자인할 수 있는 기능은 위젯을 중첩할 수 있다는 것입니다. 즉, 위젯 안에 위젯을 넣고, 위젯 안에 또 다른 위젯을 넣을 수 있습니다. 다음 섹션에서 이것이 어떻게 동작하는지 볼 수 있습니다.

w.resize(300,300)

QWidget 클래스의 크기 조정 메소드를 사용하면 모든 위젯의 크기를 설정할 수 있습니다. 이 경우 창 크기를 300x300px로 조정했습니다.

여기서 위젯은 서로 중첩될 수 있다는 점을 기억해야 합니다. 가장 바깥쪽 위젯(즉, 부모 위젯이 없는 위젯)을 윈도우라고 합니다.

w.setWindowTitle("Guru99")

setWindowTitle() 메서드는 인수로 문자열을 전달하여 창의 제목을 해당 문자열로 설정할 수 있도록 합니다. PyQt5 예제에서는 제목 표시줄에 ""가 표시됩니다. Guru99.

w.show()

show()는 단순히 모니터 화면에 위젯을 표시합니다.

sys.exit(app.exec_())

app.exec_() 메소드는 Qt/를 시작합니다.C++ 이벤트 루프. 아시다시피 PyQt는 주로 다음 언어로 작성되었습니다. C++ 이 앱은 이벤트 루프 메커니즘을 사용하여 병렬 실행을 구현합니다. `app.exec_()`는 제어권을 Qt로 넘겨주며, Qt는 사용자가 GUI에서 앱을 닫을 때만 애플리케이션을 종료합니다. 따라서 다른 앱들과 달리 Ctrl+C를 눌러도 애플리케이션이 종료되지 않습니다. Python 프로그램. Qt가 앱을 제어하기 때문에, Python 애플리케이션 내부에서 이벤트를 설정하지 않으면 이벤트가 처리되지 않습니다. 또한 exec 메서드 이름에 밑줄이 있는 이유는 exec()가 이미 키워드였기 때문입니다. Python 그리고 밑줄은 명칭 충돌을 해결합니다.

텅 빈 창 너머로

이전 섹션에서는 Qt를 사용하여 기본적인 위젯을 만드는 방법을 살펴보았습니다. 이제 사용자가 실제로 상호 작용할 수 있는 좀 더 복잡한 인터페이스를 만들어 볼 차례입니다. 다시 한번, Qt를 실행해 보세요. IDLE 다음을 적어보세요.

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(w)
    label.setText("Behold the Guru, Guru99")
    label.move(100,130)
    label.show()

    btn = QPushButton(w)
    btn.setText('Beheld')
    btn.move(110,150)
    btn.show()
    btn.clicked.connect(dialog)

    
    w.show()
    sys.exit(app.exec_())

파일을 appone.py 또는 원하는 이름으로 저장하고 F5 키를 눌러 프로그램을 실행하세요. 오류가 없다면, IDLE 아래와 같이 일부 텍스트와 버튼이 포함된 새 창이 열립니다.

비어있는 너머 Windows

  1. 첫 번째 창에서 버튼을 클릭하면, 작성한 텍스트가 담긴 새 메시지 상자가 열립니다.
  2. 이제 세부 정보 숨기기/세부 정보 표시 버튼을 클릭하여 추가 텍스트의 표시 여부를 전환할 수 있습니다.

보시다시피, 메시지 상자에 창 제목을 설정하지 않았기 때문에 기본 제목이 제공되었습니다. Python 자체.

이제 제대로 작동하니, 이전 PyQt5 예제에 추가한 코드를 살펴보겠습니다.

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

그러면 PyQt5 예제에서 사용한 QLabel, QPushButton 및 QMessage와 같은 추가 위젯을 가져옵니다.Box.

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_()

여기서는 메시지 상자 위젯을 생성하고 버튼과 다른 필드에 텍스트를 설정하는 dialog라는 메서드를 정의했습니다.

특정 위젯(이 경우 btn PushButton)에서 버튼을 누르면 프로그램의 메인 블록에서 대화 상자 메서드가 호출됩니다. 해당 버튼에서 트리거된 클릭 이벤트로 인해 이 함수가 실행됩니다. 이러한 기능을 Qt에서는 슬롯이라고 하며 다음과 같은 내용을 더 배우게 됩니다. 신호 슬롯 다가오는 단락에서.

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

이것은 앱의 주요 부분이며, 이전 예제와 마찬가지로 QApplication 인스턴스를 생성한 다음 간단한 위젯, 즉 QWidget 인스턴스를 생성하는 것으로 시작합니다.

label = QLabel(w)
    btn = QPushButton(w)

이 애플리케이션에 QLabel과 QPushButton이라는 두 개의 새로운 위젯을 추가했습니다. QLabel은 위젯 내부에 편집할 수 없는 텍스트나 자리 표시자를 인쇄하는 데 사용되는 반면, QPushButton은 클릭 가능한 버튼을 만드는 데 사용됩니다.

여기서 주목해야 할 중요한 점은 레이블과 btn 객체를 만들 때 창 객체(w)를 QLabel 및 QPushButton의 생성자에 전달한다는 것입니다. 이것이 PyQt5에서 중첩이 작동하는 방식입니다. 다른 위젯 내부에 위젯을 생성하려면 상위 위젯의 참조를 하위 생성자에 전달합니다.

label.move(100,130)
btn.move(110,150)

move()는 상위 위젯을 기준으로 위젯의 위치를 ​​설정하는 데 사용됩니다. 첫 번째 경우에는 레이블이 창 왼쪽에서 100px, 창 상단에서 130px 이동됩니다.

마찬가지로 버튼은 창 왼쪽에서 110px, 창 상단에서 150px에 배치됩니다. 이 예는 레이아웃을 달성하는 조잡한 방법이며 일반적으로 프로덕션에서는 사용되지 않습니다. 여기에는 학습 목적으로만 포함되어 있습니다. Qt는 이 PyQt 튜토리얼의 다음 섹션에서 자세히 볼 수 있는 다양한 레이아웃을 지원합니다.

btn.clicked.connect(dialog)

마지막으로, 이는 Qt에서 시그널과 슬롯을 사용하는 예시입니다. GUI 기반 애플리케이션에서 함수는 사용자가 마우스 커서를 요소 위로 올리거나 버튼을 클릭하는 등의 동작을 수행할 때 실행됩니다. 이러한 동작을 시그널이라고 합니다. 이벤트. app.exec_() 메소드가 제어권을 Qt로 전송한다는 점을 기억하세요. event 고리. 이벤트 루프의 목적은 바로 이벤트를 수신하고 그에 대한 응답으로 작업을 수행하는 것입니다.

사용자가 버튼을 클릭하는 것과 같은 이벤트가 발생할 때마다 해당 Qt 위젯은 신호. 이 신호는 다음에 연결될 수 있습니다. Python 기능 (이 예의 대화 상자 기능과 유사) 신호가 트리거될 때 기능이 실행되도록 합니다. 이러한 함수를 호출합니다. 슬롯 Qt 용어로.

이어서, 이벤트 신호에 응답하여 슬롯 함수를 실행하는 기본 구문은 다음과 같습니다.

 widget.signal.connect(slot)

이는 언제든지 신호 에 의해 트리거됩니다 위젯, 연결된 슬롯 기능이 실행됩니다. 요약하자면, 신호와 슬롯은 Qt에서 객체 간 통신을 수행하고 구성 요소 재사용성과 상호 작용성을 촉진하는 데 사용됩니다.

이제 위젯을 중첩하고 신호와 슬롯을 사용하여 상호 작용을 구현하는 방법을 알았으므로 PyQt 앱에서 사용할 수 있는 유용한 위젯 및 기타 클래스 목록은 다음과 같습니다.

구성 요소 및 위젯

PyQt에는 GUI 앱을 만드는 데 사용할 수 있는 위젯이 많이 있습니다. 그러나 PyQt5에서는 클래스가 라이선스의 다른 모듈과 개정판으로 재편성되었습니다.

따라서 PyQt5의 구조를 전체적으로 파악하는 것이 매우 중요합니다. 이 섹션에서는 PyQt5의 내부 구성 방식과 PyQt5에서 제공하는 다양한 모듈, 라이브러리 및 API 클래스에 대해 알아봅니다.

PyQt5 디렉토리 구조

PyQt5 디렉토리 구조

다음은 에서 사용하는 기본 모듈입니다. Python의 Qt 바인딩, 특히 PyQt5입니다.

  • Qt이 모듈은 아래에 언급된 모든 클래스/모듈을 하나의 모듈로 결합합니다. 이로 인해 애플리케이션에서 사용하는 메모리 양이 상당히 증가합니다. 하지만 하나의 모듈만 임포트하면 되므로 프레임워크 관리가 더 간편해집니다.
  • 큐티코어: 다른 모듈에서 사용되는 핵심 비그래픽 클래스를 포함합니다. 이곳은 Qt 이벤트 루프, 신호, 슬롯 연결 등이 구현되는 곳입니다.
  • Qt위젯PyQt5에서 사용할 수 있는 대부분의 위젯을 포함하고 있습니다.
  • QtGui: GUI 구성 요소를 포함하고 QtCore 모듈을 확장합니다.
  • Qt네트워크: Qt를 통해 네트워크 프로그래밍을 구현하는 데 사용되는 클래스가 포함되어 있습니다. TCP 서버, TCP 소켓, UDP 소켓, SSL 처리, 네트워크 세션 및 DNS 조회를 지원합니다.
  • Qt멀티미디어: 저수준 멀티미디어 기능을 제공합니다.
  • QtSql: SQL 데이터베이스에 대한 데이터베이스 통합을 구현합니다. ODBC를 지원하며, MySQL, Oracle, SQLite예산 및 PostgreSQL.

PyQt5 위젯

다음은 PyQt5에서 가장 자주 사용되는 위젯 목록입니다.

  • QLine편집: 사용자가 한 줄의 텍스트를 입력할 수 있는 입력 필드입니다.
line = QLineEdit()
  • QRadio버튼이것은 HTML의 라디오 버튼과 유사하게 선택 가능한 버튼이 있는 입력 필드입니다.
rad = QRadioButton("button title")
rad.setChecked(True)  #to select the button by default.
  • Q콤보Box: 선택 가능한 항목 목록이 포함된 드롭다운 메뉴를 표시하는 데 사용됩니다.
drop = QComboBox(w)
drop.addItems(["item one", "item two", "item three"])
  • Q체크Box: 라디오 버튼과 비슷하게, 선택 시 체크되는 선택 가능한 정사각형 상자를 라벨 앞에 표시합니다.
check = QCheckBox("button title")
  • QMenuBar창 상단에 가로 메뉴 모음을 표시합니다. 이 모음에는 QMenu 클래스의 객체만 추가할 수 있습니다. QMenu 객체는 문자열, QAction 객체 또는 다른 QMenu 객체를 포함할 수 있습니다.
  • QToolBar: 창 내에서 이동할 수 있는 수평 막대 또는 창입니다. 여기에는 버튼과 기타 위젯이 포함될 수 있습니다.
  • QTab탭 바는 위젯 상단의 여러 탭을 통해 접근할 수 있도록 창의 내용을 여러 페이지로 나누는 데 사용됩니다. 탭 바와 탭 페이지의 두 부분으로 구성됩니다.
  • QScrollBar스크롤 막대는 사용자가 창 내에서 위아래로 스크롤할 수 있도록 하는 데 사용됩니다. 이동 가능한 슬라이더와 슬라이더로 구성됩니다. track 키와 슬라이더를 위아래로 스크롤하는 두 개의 버튼이 있습니다.
scroll = QScrollBar()
  • QSplitter: 스플리터는 위젯이 적절하게 그룹화되어 어수선하게 보이지 않도록 창의 내용을 분리하는 데 사용됩니다. QSplitter는 PyQt5에서 사용할 수 있는 기본 레이아웃 핸들러 중 하나이며 콘텐츠를 가로 및 세로로 분할하는 데 사용됩니다.
  • QDock도킹 위젯은 두 가지 속성을 가진 하위 창입니다. 메인 창 내에서 이동할 수 있고, 부모 창 외부의 화면상 다른 위치에 도킹할 수 있습니다.

레이아웃 및 테마

이전 PyQt5 예제에서는 GUI에서 위젯 위치를 설정하기 위해 move() 및 resize() 메서드만 사용했습니다.

그러나 PyQt에는 애플리케이션을 위한 고급 사용자 인터페이스를 만드는 데 사용할 수 있는 강력한 레이아웃 관리 엔진이 있습니다. 이 섹션에서는 Qt에서 레이아웃을 생성하고 관리하는 데 사용되는 두 가지 중요한 클래스에 대해 알아봅니다.

  1. QBox레이아웃
  2. QGrid 레이아웃

QBox레이아웃

QBox레이아웃은 레이아웃의 하위 위젯을 가로 또는 세로 행에 정렬하는 데 사용됩니다. Q에서 상속받은 두 가지 관심 클래스Box레이아웃은 다음과 같습니다:

  • QHBox레이아웃: 하위 위젯을 가로로 정렬하는 데 사용됩니다.
  • QVBox레이아웃: 하위 위젯을 수직으로 정렬하는 데 사용됩니다.

예를 들어 QH에 버튼 XNUMX개가 정렬되는 방식은 다음과 같습니다.Box레이아웃이 보입니다.

QBox레이아웃

import sys
from PyQt5.QtWidgets import *

if __name__ == "__main__":

    app = QApplication([])
    w = QWidget()
    w.setWindowTitle("Musketeers")

    btn1 = QPushButton("Athos")
    btn2 = QPushButton("Porthos")
    btn3 = QPushButton("Aramis")

    hbox = QHBoxLayout(w)

    hbox.addWidget(btn1)
    hbox.addWidget(btn2)
    hbox.addWidget(btn3)

    w.show()

    sys.exit(app.exec_())

그리고 이것이 QV에서 보이는 모습입니다.Box형세.

QBox레이아웃

import sys
from PyQt5.QtWidgets import *

if __name__ == "__main__":

    app = QApplication([])
    w = QWidget()
    w.setWindowTitle("Musketeers")

    btn1 = QPushButton("Athos")
    btn2 = QPushButton("Porthos")
    btn3 = QPushButton("Aramis")

    vb = QVBoxLayout(w)

    vb.addWidget(btn1)
    vb.addWidget(btn2)
    vb.addWidget(btn3)

    w.show()

    sys.exit(app.exec_())

이 시점에서 설명이 필요한 유일한 함수는 addWidget() 메서드입니다. H에 위젯을 삽입하는 데 사용됩니다.Box 또는 VBox 공들여 나열한 것. 다음 섹션에서 볼 수 있듯이 다른 수의 매개변수를 사용하는 다른 레이아웃에서도 사용됩니다. 위젯은 삽입한 순서대로 레이아웃 내부에 나타납니다.

QGrid 레이아웃

QGridLayout은 위젯이 그리드(행렬이나 2D 배열과 같은) 형태로 배치되는 인터페이스를 만드는 데 사용됩니다. 그리드 레이아웃에 요소를 삽입하려면 행렬 표현을 사용하여 그리드의 행 및 열 수와 해당 요소의 위치를 ​​정의할 수 있습니다.

예를 들어, 3*3 그리드(즉, XNUMX개의 행과 XNUMX개의 열로 구성된 그리드)를 만들려면 다음 코드를 작성합니다.

Import sys
from PyQt5.QtWidgets import *

if __name__ == "__main__":
    app = QApplication([])

    w = QWidget()

    grid = QGridLayout(w)

    for i in range(3):
        for j in range(3):
            grid.addWidget(QPushButton("Button"),i,j)


    w.show()
    sys.exit(app.exec_())

결과는 다음과 같습니다.

QGrid 레이아웃

그리드 레이아웃의 addWidget() 메서드는 다음과 같은 인수를 받습니다.

  • 그리드에 추가하려는 위젯 객체
  • 물체의 x좌표
  • 객체의 y 좌표
  • 행 간격(기본값 = 0)
  • col-span(기본값 = 0)

더 잘 이해하려면 아래와 같이 각 위젯을 수동으로 삽입할 수 있습니다.

import sys
from PyQt5.QtWidgets import *

if __name__ == "__main__":
    app = QApplication([])

    w = QWidget()

    grid = QGridLayout(w)
    grid.addWidget(QPushButton("Button one"),0,0)
    grid.addWidget(QPushButton("Button two"),0,1)
    grid.addWidget(QPushButton("Button three"),1,0)
    grid.addWidget(QPushButton("Button four"),1,1)


    w.show()
    sys.exit(app.exec_())

그리드는 다음과 같습니다.

QGrid 레이아웃

둘 이상의 행이나 열을 확장하기 위해 rowspan 및 colspan 매개변수를 addWidget()에 전달할 수도 있습니다.

예를 들어,

grid.addWidget(QPushButton("Button five"),2,0,1,0)

그러면 두 열 모두에 걸쳐 확장되는 버튼이 생성됩니다.

QGrid 레이아웃

테마

PyQt5에는 앱에서 사용할 수 있는 몇 가지 테마가 내장되어 있습니다. 그만큼 세트스타일() QApplication 인스턴스에서 호출되는 메소드는 응용프로그램에 특정 테마를 설정하는 데 사용됩니다.

예를 들어, 다음 코드 줄을 추가하면 애플리케이션의 테마가 기본 테마에서 Fusion 테마로 변경됩니다.

app.setStyle("Fusion")

위 예시는 Fusion 테마에서 다음과 같이 표시됩니다.

테마

앱 테마를 적용하는 데 유용한 또 다른 기능은 setPalette() 메서드입니다. 다음은 setPalette()를 사용하여 다양한 위젯의 색상을 변경하는 코드입니다.

import sys
from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import *
from PyQt5.QtGui import QPalette

if __name__ == "__main__":
    app = QApplication([])
    app.setStyle("Fusion")
    
    qp = QPalette()
    qp.setColor(QPalette.ButtonText, Qt.black)
    qp.setColor(QPalette.Window, Qt.black)
    qp.setColor(QPalette.Button, Qt.gray)
    app.setPalette(qp)

    w = QWidget()

    grid = QGridLayout(w)
    grid.addWidget(QPushButton("Button one"),0,0)
    grid.addWidget(QPushButton("Button two"),0,1)
    grid.addWidget(QPushButton("Button three"),1,0)
    grid.addWidget(QPushButton("Button four"),1,1)


    w.show()
    sys.exit(app.exec_())

결과는 다음과 같습니다.

테마

setPalette() 메서드를 사용하려면 먼저 팔레트를 정의해야 합니다. 이는 QPalette 클래스의 객체를 생성하여 수행됩니다.

 qp = QPalette()

QPalette 클래스는 QtGui 모듈에 속하므로 이 기능을 사용하려면 해당 모듈을 임포트해야 합니다. QPalette 객체를 생성한 후에는 setColor() 메서드를 사용하여 색상을 변경하려는 위젯의 이름과 설정할 색상을 전달합니다.

 qp.setColor(QPalette.Window, Qt.black)

이렇게 하면 창 색상이 검정색으로 변경됩니다. 색 구성표를 정의한 후에는 setPalette() 함수를 사용하여 애플리케이션에 팔레트를 적용하십시오.

app.setPalette(qp)

앱에 대한 몇 가지 기본 테마를 만들고 싶다면 이것이 전부입니다. PyQt에서는 스타일시트를 사용하여 위젯의 모양을 정의할 수도 있습니다. CSS에 익숙하다면 Qt 스타일 시트를 사용하여 앱의 고급 스타일을 쉽게 정의할 수 있습니다.

자주 묻는 질문

Tkinter는 다음과 같은 기능을 제공합니다. Python 작고 간단한 도구에 적합합니다. PyQt는 훨씬 더 많은 위젯, 시각적 디자이너, 네이티브 앱과 같은 디자인을 제공하여 대규모 전문 데스크톱 애플리케이션에 더 적합하지만, 학습 곡선이 더 가파르고 GPL 라이선스를 사용해야 한다는 단점이 있습니다.

둘 다 동일한 Qt 라이브러리를 사용하고 거의 동일한 API를 공유합니다. 주요 차이점은 라이선스입니다. PyQt는 GPL 또는 유료 상용 라이선스를 사용하는 반면, PySide(Qt for Linux)는 유료 상용 라이선스를 사용합니다. Python이 소프트웨어는 LGPL 라이선스를 사용하므로, 비공개 소스 코드를 무료로 배포할 수 있습니다.

Qt Designer는 드래그 앤 드롭 방식으로 레이아웃을 XML .ui 파일로 저장하는 도구입니다. 이 파일을 변환하려면 다음을 사용하세요. Python pyuic5 유틸리티를 사용하거나 uic.loadUi()를 사용하여 런타임에 로드할 수 있습니다.

PyQt6는 최신 Qt 6 프레임워크를 기반으로 하며, Qt.AlignmentFlag.AlignLeft와 같이 범위가 완전히 지정된 열거형을 필요로 합니다. PyQt5는 Qt 5를 대상으로 하며, 현재까지 가장 널리 사용되는 버전입니다. 또한 PyQt6는 일부 사용되지 않는 모듈을 제거하고 고해상도(High-DPI) 지원을 개선했습니다.

PyInstaller를 사용하세요. `pyinstaller –onefile –windowed app.py` 명령어를 실행하면 스크립트, PyQt5, Qt 라이브러리가 하나의 실행 파일로 묶입니다. `--windowed` 옵션은 콘솔 창을 숨깁니다. `fbs`와 `cx_Freeze`도 널리 사용되는 대안입니다.

PyQt5는 기본 사항만 알고 있다면 초보자에게 친숙합니다. Python클래스, 객체, 그리고 시그널-슬롯 패턴을 이해하는 것이 가장 도움이 됩니다. Qt Designer를 사용하면 레이아웃을 시각적으로 구성할 수 있으므로, 모든 위젯을 직접 익히기 전에 작동하는 창을 만들 수 있습니다.

PyQt는 머신러닝 모델을 위한 데스크톱 프런트엔드, 즉 데이터를 로드하고, 학습 또는 추론을 시작하고, 예측, 차트 또는 이미지를 표시하는 대시보드를 구축하는 데 사용됩니다. NumPy, pandas, Matplotlib과 같은 라이브러리와 잘 어울리며, 다양한 기능을 제공합니다.ping 사용자 친화적인 GUI에서 학습된 모델을 사용할 수 있습니다.

예. GitHub Copilot은 QApplication 설정, 위젯 생성, 시그널-슬롯 연결과 같은 일반적인 PyQt5 패턴을 주석이나 함수 이름에서 자동 완성해 줍니다. 생성된 창을 실행하여 레이아웃과 이벤트 핸들러가 의도대로 작동하는지 확인하세요.

이 게시물을 요약하면 다음과 같습니다.