Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Industrial programming >> Python

Uitgebreide PyQt5-tutorial: Bouw professionele GUI's in Python

Wat is PyQt?

PyQt is een Python-binding voor het Qt-framework, een cross-platform C++-bibliotheek die wordt gebruikt om native GUI-toepassingen te maken op Windows, macOS, Linux, Android, iOS, Raspberry Pi en meer. De binding wordt onderhouden door Riverbank Computing (VK), terwijl Qt zelf wordt ontwikkeld door The Qt Company (Finland). PyQt geeft Python-ontwikkelaars toegang tot Qt's rijke set aan widgets, networking, database-, 3D- en multimedia-mogelijkheden.

Wat je in deze tutorial leert

  • Belangrijkste kenmerken van PyQt5
  • Beschikbare PyQt-versies
  • Hoe je PyQt5 installeert op Windows, macOS en Linux
  • Fundamentele PyQt-concepten en voorbeeldprogramma's
  • Kerncomponenten en widgets
  • Layout-strategieën en thema-aanpassing

Belangrijkste kenmerken van PyQt5

PyQt5 blootstelt meer dan 600 klassen die het volgende dekken:

  • Grafische gebruikersinterfaces
  • SQL-database-integratie (SQLite, MySQL, PostgreSQL, Oracle, ODBC)
  • Webrendering via QtWebEngine
  • XML-parsing en -manipulatie
  • Robuuste networking (TCP/UDP, SSL, DNS)
  • Multimedia en 3D-graphics (QtMultimedia, Qt3D)

Deze mogelijkheden stellen ontwikkelaars in staat om complexe, hoogpresterende desktop- en embedded-toepassingen te bouwen. Grote bedrijven zoals LG, Mercedes-Benz, AMD, Panasonic en Harman vertrouwen op Qt voor hun UI-stacks.

PyQt-versies

Riverbank Computing biedt twee hoofdbindings:

  • PyQt4 – ondersteunt Qt 4.x- en Qt 5.x-modules (niet achterwaarts compatibel)
  • PyQt5 – bindings exclusief voor Qt 5.x

Daarnaast biedt PyQt3D Python-bindings voor het Qt3D-framework, nuttig voor real-time 3D-rendering en simulatie.

PyQt5 installeren

Twee veelgebruikte installatiemethoden worden hieronder beschreven. We raden aan om wheel-packages te gebruiken omdat ze gecompileerde C++-binaries bevatten en lange build-processen voorkomen.

Methode 1: Installeren via Wheels (Aanbevolen)

  1. Open je favoriete terminal of opdrachtprompt.
  2. Voer pip install PyQt5 uit om de wheel te downloaden (≈ 50 MB).
  3. Controleer of de installatie succesvol is voltooid.

Voorbeeld op Windows:

pip install PyQt5

Eenmaal geïnstalleerd, kun je PyQt5.QtWidgets importeren en beginnen met het bouwen van toepassingen.

Methode 2: Bouwen vanuit broncode

Bouwen vanuit broncode is complexer omdat het C++-code compileert. Het is alleen nodig als je aangepaste wijzigingen nodig hebt of de wheel voor je platform niet beschikbaar is.

Fundamenten van PyQt5-programmering

Hieronder volgt een minimaal voorbeeld dat een 300×300-venster opent met de titel "Guru99". Elke regel is voor duidelijkheid geannoteerd.

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

Uitleg:

  • QApplication – de kern-gebeurtenislus.
  • QWidget – basisklasse voor alle UI-componenten.
  • resize() – stelt de vensterdimensies in.
  • setWindowTitle() – definieert de titelbalktekst.
  • show() – toont de widget.
  • app.exec_() – start de gebeurtenislus en blokkeert tot het venster sluit.

Interactiviteit toevoegen

Het volgende voorbeeld voegt een label, een knop en een dialoogvenster toe dat verschijnt wanneer op de knop wordt geklikt. Het demonstreert signalen en slots, de kern van Qt's gebeurtenissysteem.

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

def dialog():
    mbox = QMessageBox()
    mbox.setText("Je loyaliteit is genoteerd")
    mbox.setDetailedText("Je bent nu een discipel en onderdaan van de alwetende 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("Zie de Guru, Guru99", w)
    label.move(100, 130)
    btn = QPushButton("Bekeken", w)
    btn.move(110, 150)
    btn.clicked.connect(dialog)
    w.show()
    sys.exit(app.exec_())

Klikken op de knop activeert dialog(), wat een modale QMessageBox creëert.

Kerncomponenten en widgets

PyQt5's architectuur is georganiseerd in verschillende modules. Deze hiërarchie begrijpen helpt je om alleen wat je nodig hebt te importeren.

Module-overzicht

  • Qt – bundelt alle submodules; handig voor kleine scripts.
  • QtCore – kern niet-GUI-klassen (signalen, slots, timers).
  • QtWidgets – standaard GUI-widgets (knoppen, labels, enz.).
  • QtGui – grafische primitieven en geavanceerd tekenen.
  • QtNetwork – TCP/UDP-sockets, SSL, DNS.
  • QtMultimedia – audio/videondersteuning.
  • QtSql – database-integratie.

Veelgebruikte widgets

  • QLineEdit – invoerveld voor één regel tekst.
  • QRadioButton – selecteerbare radioknop.
  • QComboBox – dropdown-selector.
  • QCheckBox – aan/uit-vinkje.
  • QMenuBar – horizontale menubalk.
  • QToolBar – werkbalk met knoppen.
  • QTabWidget – tabbladinterface.
  • QScrollBar – scrollbalk-widget.
  • QSplitter – aanpasbare splitsweergave.
  • QDockWidget – loskoppelbaar dock-paneel.

Layout-beheer

In plaats van widgets handmatig te positioneren met move() en resize(), biedt Qt layout-managers die widgets automatisch rangschikken op basis van de venstergrootte.

Box-layouts (HBox & VBox)

QHBoxLayout rangschikt widgets horizontaal; QVBoxLayout rangschikt ze verticaal.

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

app = QApplication([])
win = QWidget()
win.setWindowTitle("Musketiers")
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_()

Vervang QHBoxLayout door QVBoxLayout om de knoppen verticaal te stapelen.

Grid-layout

Organiseer widgets in een 2D-rooster. De addWidget()-methode accepteert rij- en kolomindices plus optionele rij- en kolom-span-argumenten.

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"Knop {i},{j}"), i, j)
win.show()
app.exec_()

Aangepaste thema's en stijlen

PyQt5 ondersteunt native thema's en aangepaste stylesheets.

Ingebouwde thema's

Stel de toepassingstijl in met app.setStyle("Fusion") of een andere beschikbare stijl.

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

Palette-aanpassing

Gebruik QPalette om widget-kleuren programmatisch aan te passen.

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 Style Sheets (CSS-achtig)

Voor geavanceerde styling, pas stylesheets direct toe op widgets of de gehele toepassing.

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

Belangrijkste leerpunten

  • PyQt5 is een krachtige Python-binding voor het Qt-framework, geschikt voor cross-platform desktop-, embedded- en mobiele apps.
  • Installatie werkt het beste via wheels; bron-builds zijn optioneel.
  • Kernmodules: QtCore, QtGui, QtWidgets, QtNetwork, QtMultimedia, QtSql.
  • Widgets omvatten knoppen, labels, tekstvakken, radioknoppen, checkboxes, menu's, werkbalken, tabbladen, splitters en docks.
  • Interactiviteit berust op Qt's signalen-en-slots-mechanisme.
  • Layouts – Box en Grid – automatiseren widget-plaatsing, wat de responsiviteit verbetert.
  • Thema's kunnen worden gerealiseerd met ingebouwde stijlen, paletten of Qt Style Sheets.
  • Qt Designer en Qt Creator stroomlijnen UI-ontwerp en applicatie-pakkettering.

Python

  1. C# Collections Beheersen: Een Praktische Tutorial met Real-World Voorbeelden
  2. Python print()-functie: Praktische handleiding met voorbeelden
  3. Python's str.count() beheersen: Karakters & substrings tellen met voorbeelden
  4. Python `format()` strings beheersen met duidelijke voorbeelden
  5. Python's String.find()-methode beheersen: Syntaxis, voorbeelden & alternatieven
  6. Python lambda-functies beheersen: praktische voorbeelden & best practices
  7. Python round()-functie uitgelegd met praktische voorbeelden
  8. Python's map()-functie beheersen: syntaxis, voorbeelden en best practices
  9. Python timeit() – Uitvoeringstijd meten met praktische voorbeelden
  10. Python Counter in collections – Efficiënt tellen, updaten en rekenkundige operaties
  11. type() en isinstance() in Python begrijpen: praktische voorbeelden