예제가 포함된 PyQt5 튜토리얼: PyQt를 사용하여 GUI 디자인 Python
PyQt란 무엇인가요?
파이큐트 오픈소스 위젯 툴킷 Qt의 파이썬 바인딩이며, 크로스 플랫폼 애플리케이션 개발 프레임워크 역할도 합니다. Qt는 인기 있는 C++ 모든 주요 데스크톱, 모바일 및 임베디드 플랫폼용 GUI 애플리케이션을 작성하기 위한 프레임워크(Linux 지원, Windows, 맥 OS, Android, iOS, 라즈베리 파이 등).
PyQt는 영국에 본사를 둔 회사인 Riverbank Computing에서 개발하고 유지 관리하는 무료 소프트웨어인 반면, Qt는 The Qt Company라는 핀란드 회사에서 개발했습니다.
PyQT의 특징
PyQt의 중요한 기능은 다음과 같습니다.
다음과 같은 다양한 기능을 다루는 XNUMX개 이상의 클래스로 구성된 PyQt를 알아보세요.
- 그래픽 사용자 인터페이스
- SQL 데이터베이스
- 웹 툴킷
- XML 처리
- 네트워킹
이러한 기능을 결합하여 고급 UI는 물론 독립 실행형 애플리케이션도 만들 수 있습니다. 모든 산업 분야의 많은 주요 기업들이 Qt를 사용하고 있습니다. LG, Mercedes, AMD, Panasonic, Harman 등이 그 예입니다.
PyQt 버전
PyQt는 PyQt4와 PyQt5의 두 가지 버전으로 제공됩니다. PyQt4는 Qt 프레임워크의 4.x 및 5.x 버전을 바인딩하기 위한 글루 코드를 제공하는 반면, PyQt5는 5.x 버전에 대한 바인딩만 제공합니다. 결과적으로 PyQt5는 이전 버전의 더 이상 사용되지 않는 모듈과 호환되지 않습니다. 이 Qt GUI 튜토리얼에서는 예제 데모를 위해 PyQt5를 사용합니다. 이 두 가지 버전 외에도
Riverbank Computing은 Qt3D 프레임워크용 Python 바인딩인 PyQt3D도 제공합니다. Qt3D는 2D/3D 렌더링을 통해 실시간 시뮬레이션 시스템을 만드는 데 사용되는 애플리케이션 프레임워크입니다.
PyQt5를 설치하는 방법
이 PyQt5 튜토리얼에서는 PyQt를 설치하는 두 가지 방법을 살펴보겠습니다.
- 휠 파일 사용
- 소스에서 빌드 및 설치
Qt(큐트 발음)는 복잡한 시스템이며 PyQt 코드베이스에는 컴파일된 코드가 포함되어 있습니다. C++ 그리고 Python 후드 아래의 코드. 결과적으로 다른 파이썬 라이브러리에 비해 소스에서 빌드하고 설치하는 과정이 복잡합니다. 그러나 휠을 사용하여 PyQt5를 쉽게 설치할 수 있습니다.
바퀴를 이용한 설치
휠은 새로운 표준입니다. Python 패키징 및 배포 형식입니다. 간단히 말해서, 휠은 특별한 이름과 .헐 파일 확장자. 바퀴는 pip를 사용하여 설치할 수 있습니다(Python의 패키지 관리자)는 최신 버전에 기본적으로 포함되어 있습니다. Python.
그래서, 당신이 가지고 있다면 Python 3.4 이상이 설치되어 있으면 이미 pip가 있습니다. 그러나 이전 버전을 사용하는 경우 Python, 계속 진행하기 전에 pip를 다운로드하고 설치해야 합니다. 다음 링크에서 해당 지침을 검색할 수 있습니다. https://pypi.org/project/pip/.
PyQt5를 설치하려면,
단계 1) 명령 프롬프트를 엽니다.
명령 프롬프트 또는 PowerShell을 엽니다. Windows 기계.
단계 2) 다음을 입력하세요.
pip install PyQt5
단계 3) 설치 완료.
이 PyQt5 튜토리얼의 이 단계에서는 PyQt5 whl 패키지(약 50MB)를 다운로드하여 시스템에 설치합니다.
또는 다음을 다운로드할 수도 있습니다. Windows 컴퓨터에 설치된 Python 버전의 바이너리입니다.
완료되면 이 PyQt5 튜토리얼의 다음 섹션으로 진행하여 첫 번째 GUI 앱을 작성하세요.
기본 PyQt Concepts 및 프로그램
이제 컴퓨터에 PyQt5를 성공적으로 설치했으므로 작성할 준비가 되었습니다. Python GUI 디자인 애플리케이션.
화면에 빈 창을 표시하는 이 PyQt5 튜토리얼의 간단한 앱부터 시작해 보겠습니다.
파이썬을 실행하세요 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를 눌러 프로그램을 실행합니다. 아니면 저장된 파일을 두 번 클릭하여 애플리케이션을 시작합니다. 모든 것을 올바르게 했다면 아래에 표시된 것처럼 Guru99라는 제목의 새 창이 열립니다.
엄청난! 작동 중입니다. 많지는 않지만 기본을 파악하기에는 충분합니다. 이제 이 PyQt 튜토리얼에서 프로그램의 각 라인이 수행하는 작업을 자세히 살펴보겠습니다.
from PyQt5.QtWidgets import QApplication, QWidget
이 명령문은 GUI를 생성하는 데 필요한 모든 모듈을 현재 네임스페이스로 가져옵니다. QtWidgets 모듈에는 이 과정에서 사용할 주요 위젯이 모두 포함되어 있습니다. Python Qt 튜토리얼.
app = QApplication(sys.argv)
여기서는 QApplication 클래스의 객체를 생성합니다. 이 단계는 PyQt5에 필수입니다. 모든 UI 앱은 앱에 대한 일종의 진입점으로 QApplication 인스턴스를 생성해야 합니다. 생성하지 않으면 오류가 표시됩니다.
sys.argv는 셸을 통해 애플리케이션을 시작할 때 또는 인터페이스를 자동화하는 동안 애플리케이션에 전달할 수 있는 명령줄 매개변수 목록입니다.
이 PyQt5 예에서는 QApplications에 인수를 전달하지 않았습니다. 따라서 아래 코드로 대체할 수도 있으며 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로 넘기고, 사용자가 GUI에서 닫을 때만 애플리케이션을 종료합니다. 그래서 다른 파이썬 프로그램에서처럼 ctrl+c가 애플리케이션을 종료하지 않습니다. Qt가 앱을 제어하기 때문에, 애플리케이션 내부에서 설정하지 않는 한 파이썬 이벤트는 처리되지 않습니다. 또한, exec 메서드의 이름에 밑줄이 있다는 점에 유의하세요. exec()는 이미 파이썬에서 키워드였고 밑줄이 이름 충돌을 해결하기 때문입니다.
텅 빈 창 너머로
이전 섹션에서는 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 아래와 같이 일부 텍스트와 버튼이 포함된 새 창이 열립니다.
- 첫 번째 창에서 버튼을 클릭하면, 작성한 텍스트가 담긴 새 메시지 상자가 열립니다.
- 이제 세부 정보 숨기기/세부 정보 표시 버튼을 클릭하여 추가 텍스트의 표시 여부를 전환할 수 있습니다.
보시다시피, 메시지 상자에 아무 창 제목도 설정하지 않았기 때문에 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로 전송한다는 점을 기억하세요. 행사-고리. 이벤트 루프의 목적은 바로 이벤트를 수신하고 그에 대한 응답으로 작업을 수행하는 것입니다.
사용자가 버튼을 클릭하는 것과 같은 이벤트가 발생할 때마다 해당 Qt 위젯은 신호. 이 신호는 다음에 연결될 수 있습니다. 파이썬 함수 (이 예의 대화 상자 기능과 유사) 신호가 트리거될 때 기능이 실행되도록 합니다. 이러한 함수를 호출합니다. 슬롯 Qt 용어로.
이후 이벤트의 신호에 따라 슬롯 함수를 트리거하는 기본 구문은 다음과 같습니다.
widget.signal.connect(slot)
즉, 언제든지 신호 에 의해 트리거됩니다 위젯, 연결된 슬롯 기능이 실행됩니다. 요약하자면, 신호와 슬롯은 Qt에서 객체 간 통신을 수행하고 구성 요소 재사용성과 상호 작용성을 촉진하는 데 사용됩니다.
이제 위젯을 중첩하고 신호와 슬롯을 사용하여 상호 작용을 구현하는 방법을 알았으므로 PyQt 앱에서 사용할 수 있는 유용한 위젯 및 기타 클래스 목록은 다음과 같습니다.
구성 요소 및 위젯
PyQt에는 GUI 앱을 만드는 데 사용할 수 있는 위젯이 많이 있습니다. 그러나 PyQt5에서는 클래스가 라이선스의 다른 모듈과 개정판으로 재편성되었습니다.
따라서 PyQt5의 구조에 대해 높은 수준의 관점을 갖는 것이 중요합니다. 이 섹션에서는 PyQt5가 내부적으로 어떻게 구성되어 있는지 살펴보고 PyQt5에서 제공하는 다양한 모듈, 라이브러리 및 API 클래스에 대해 알아봅니다.
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: 사용자가 창 내에서 위아래로 스크롤할 수 있는 스크롤 막대를 만드는 데 사용됩니다. 이는 이동 가능한 슬라이더, 슬라이더 트랙, 슬라이더를 위 또는 아래로 스크롤하는 두 개의 버튼으로 구성됩니다.
scroll = QScrollBar()
- QSplitter: 스플리터는 위젯이 적절하게 그룹화되어 어수선하게 보이지 않도록 창의 내용을 분리하는 데 사용됩니다. QSplitter는 PyQt5에서 사용할 수 있는 기본 레이아웃 핸들러 중 하나이며 콘텐츠를 가로 및 세로로 분할하는 데 사용됩니다.
- QDock: 도크 위젯은 두 가지 속성이 있는 하위 창입니다.
- 메인 창 내에서 이동할 수 있으며
- 상위 창 외부의 화면의 다른 위치에 도킹할 수 있습니다.
레이아웃 및 테마
이전 PyQt5 예제에서는 GUI에서 위젯 위치를 설정하기 위해 move() 및 resize() 메서드만 사용했습니다.
그러나 PyQt에는 애플리케이션을 위한 고급 사용자 인터페이스를 만드는 데 사용할 수 있는 강력한 레이아웃 관리 엔진이 있습니다. 이 섹션에서는 Qt에서 레이아웃을 생성하고 관리하는 데 사용되는 두 가지 중요한 클래스에 대해 알아봅니다.
- QBox레이아웃
- QGrid 레이아웃
QBox레이아웃
QBox레이아웃은 레이아웃의 하위 위젯을 가로 또는 세로 행에 정렬하는 데 사용됩니다. Q에서 상속받은 두 가지 관심 클래스Box레이아웃은 다음과 같습니다:
- QHBox레이아웃: 하위 위젯을 가로로 정렬하는 데 사용됩니다.
- QVBox레이아웃: 하위 위젯을 수직으로 정렬하는 데 사용됩니다.
예를 들어 QH에 버튼 XNUMX개가 정렬되는 방식은 다음과 같습니다.Box레이아웃이 보입니다.
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형세.
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_())
결과는 다음과 같습니다.
addWidget() 메소드는 그리드 레이아웃에서 다음 인수를 사용합니다.
- 그리드에 추가하려는 위젯 객체
- 물체의 x좌표
- 객체의 y 좌표
- 행 범위(기본값 =0)
- 열 범위(기본값=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_())
그리드는 다음과 같습니다.
둘 이상의 행이나 열을 확장하기 위해 rowspan 및 colspan 매개변수를 addWidget()에 전달할 수도 있습니다.
예를 들어,
grid.addWidget(QPushButton("Button five"),2,0,1,0)
그러면 두 열 모두에 걸쳐 확장되는 버튼이 생성됩니다.
테마
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 스타일 시트를 사용하여 앱의 고급 스타일을 쉽게 정의할 수 있습니다.
요약
- PyQt는 파이썬 바인딩입니다. C++ UI 프레임워크, Qt.
- PyQt4와 PyQt5는 Riverbank Computing에서 개발한 두 가지 주요 버전입니다.
- PyQt 프레임워크의 주요 모듈은 다음과 같습니다.
- Qt
- 큐티코어
- Qt위젯
- QtGui
- QtSql
- Qt네트워크
- PyQt는 다음과 같은 다양한 위젯을 지원합니다.
- 버튼
- 텍스트 라벨
- 텍스트 필드
- 라디오 버튼과 체크박스
- 도구 모음 및 메뉴 모음
- 웹킷
- 탭
- 부두
- PyQt에서는 상호작용이 다음을 사용하여 구현됩니다. 신호 그리고 슬롯.
- An event GUI에서 사용자가 수행하는 작업(예: 버튼 클릭)입니다.
- A 신호 이벤트가 발생할 때 해당 위젯에 의해 발생됩니다.
- A 슬롯 신호에 연결되어 신호가 발생하면 실행되는 함수입니다.
- PyQt는 강력한 레이아웃 엔진을 갖추고 있으며 고급 레이아웃 설계 및 관리를 지원합니다. 다음은 PyQt에서 자주 사용되는 두 가지 레이아웃 체계입니다.
- Box 레이아웃
- 그리드 레이아웃
- PyQt 디자이너를 사용하면 GUI 애플리케이션을 위한 사용자 정의 테마를 만들 수 있으며 스타일 시트에 대한 지원이 내장되어 있습니다.
- qtcreator Python 사용자 인터페이스와 독립형 애플리케이션을 만드는 데 사용할 수 있습니다.