Výukový program PyQt5 s příklady: Vytvoření Python GUI s Qt

⚡ Chytré shrnutí

PyQt je Python vazba pro multiplatformní sadu nástrojů Qt widgetů, která umožňuje vývojářům vytvářet nativní grafická uživatelská rozhraní pro stolní počítače. Zabaluje více než šest set C++ třídy zahrnující okna, tlačítka, rozvržení, signály, sloty a témata pro Windows, macOSa Linux.

  • 🔘 Co je PyQt: A Python vazba pro Qt C++ framework, spravovaný společností Riverbank Computing.
  • ☑️ Provedení: PyQt4 se váže na Qt 4.x a 5.x; PyQt5 cílí pouze na řadu Qt 5.x.
  • (Tj. Instalace: Správce balíčků pip instaluje PyQt5 z kola jediným příkazem.
  • 🧪 První aplikace: QApplication a QWidget vytvoří a zobrazí základní okno na obrazovce.
  • 🛠️ Signala sloty: Události widgetů vyvolávají signály, které se připojují k Python funkce slotů.
  • 🤖 Připraveno pro umělou inteligenci: PyQt vytváří desktopová front-endová rozhraní, která spouštějí a vizualizují modely strojového učení.

Výukový program PyQt5

Následující sekce vás provedou od základů PyQt přes instalaci, základní widgety, rozvržení a šablony s příklady, které lze spustit.

Co je PyQt?

PyQt je Python vazba open-source widget-toolkitu Qt, který funguje také jako framework pro vývoj multiplatformních aplikací. Qt je populární C++ framework pro psaní grafických aplikací pro všechny hlavní desktopové, mobilní a embedded platformy (podporuje Linux, Windows, macOS, Android, iOS, Raspberry Pi a další).

PyQt je svobodný software vyvinutý a spravovaný společností Riverbank Computing se sídlem v Anglii, zatímco Qt je vyvíjen finskou firmou s názvem The Qt Company.

Vlastnosti PyQt

Zde jsou důležité funkce PyQt:

PyQt se skládá z více než šesti set tříd pokrývajících řadu funkcí, jako například:

  • Grafická uživatelská rozhraní
  • Databáze SQL
  • Webové sady nástrojů
  • XML zpracování
  • networking

Tyto funkce lze kombinovat a vytvářet tak pokročilá uživatelská rozhraní i samostatné aplikace. Qt používá mnoho velkých společností napříč všemi odvětvími. Mezi příklady patří LG, Mercedes, AMD, Panasonic a Harman.

Verze PyQt

PyQt je k dispozici ve dvou edicích, PyQt4 a PyQt5. PyQt4 poskytuje spojovací kód pro vazbu verzí frameworku Qt 4.x a 5.x, zatímco PyQt5 poskytuje vazbu pouze pro verze 5.x. V důsledku toho není PyQt5 zpětně kompatibilní se zastaralými moduly starší verze. V tomto tutoriálu s grafickým rozhraním PyQt bude PyQt5 použit pro demonstraci příkladů. Kromě těchto dvou verzí poskytuje Riverbank Computing také PyQt3D – Python vazby pro framework Qt3D. Qt3D je aplikační framework používaný k vytváření simulačních systémů v reálném čase s 2D/3D vykreslováním.

Jak nainstalovat PyQt5

V tomto tutoriálu PyQt5 uvidíme dva způsoby instalace PyQt:

  • Použití souborů Wheel
  • Sestavení a instalace ze zdroje

Qt (vyslovováno roztomilý) je komplexní systém a kódová základna PyQt obsahuje kompilovaný C++ a Python kód pod kapotou. V důsledku toho je jeho sestavení a instalace ze zdrojového kódu složitější než u jiných Python knihovny. PyQt5 však můžete snadno nainstalovat pomocí koleček.

Instalace s kolečky

Kola jsou novým standardem Python formát balení a distribuce. Jednoduše řečeno, kolečko je ZIP archiv se speciálním názvem a .whl přípona souboru. Kola lze instalovat pomocí pip (Pythonsprávce balíčků), který je standardně součástí nejnovějších verzí Python.

Pokud tedy máte Python 3.4 nebo novější, již máte pip. Pokud však používáte starší verzi Python, před dalším postupem si musíte stáhnout a nainstalovat pip. Pokyny můžete vyhledat na tomto odkazu: https://pypi.org/project/pip/.

Instalace PyQt5:

Krok 1) Otevřete příkazový řádek.
Otevřete příkazový řádek nebo PowerShell ve svém Windows stroj.

nainstalovat PyQt5

Krok 2) Zadejte následující.

 pip install PyQt5

Krok 3) Instalace úspěšná.
Tento krok v tomto tutoriálu PyQt5 stáhne balíček PyQt5 whl (asi 50 MB) a nainstaluje jej do vašeho systému.

nainstalovat PyQt5

Případně si také můžete stáhnout a Windows binární soubor pro verzi Python v počítači.

Po dokončení přejděte k další části tohoto tutoriálu PyQt5 a napište svou první aplikaci GUI.

Základní PyQt Concepts a Programy

Nyní, když jste si úspěšně nainstalovali PyQt5 na svůj počítač, jste připraveni psát. Python Aplikace s grafickým rozhraním.

Začněme v tomto tutoriálu o PyQt5 s jednoduchou aplikací, která na obrazovce zobrazí prázdné okno.

Rozpalte svůj Python IDLE a zadejte následující:

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

Uložte jej jako app.py (název nehraje roli) a stisknutím klávesy F5 spusťte program. Případně stačí dvakrát kliknout na uložený soubor a spustit aplikaci. Pokud jste vše udělali správně, otevře se nové okno s názvem Guru99, jak je uvedeno níže.

Základní PyQt Concepts

Skvělé! Funguje to. Není to moc, ale stačí to k pochopení základů. Nyní se v tomto tutoriálu o PyQt podrobně podívejme, co dělá každý řádek ve vašem programu.

from PyQt5.QtWidgets import QApplication, QWidget

Tento příkaz importuje všechny moduly, které potřebujete k vytvoření GUI, do aktuálního jmenného prostoru. Modul QtWidgets obsahuje všechny hlavní widgety, které v tomto budete používat Python Qt tutoriál.

app = QApplication(sys.argv)

Zde vytváříte objekt třídy QApplication. Tento krok je pro PyQt5 nutností; každá aplikace uživatelského rozhraní musí vytvořit instanci QApplication jako jakýsi vstupní bod do aplikace. Pokud jej nevytvoříte, zobrazí se chyby.

sys.argv je seznam parametrů příkazového řádku, které můžete předat aplikaci při jejím spouštění přes shell nebo při automatizaci rozhraní.

V tomto příkladu PyQt5 jste QApplication nepředali žádné argumenty. Můžete jej tedy nahradit níže uvedeným kódem a ani nemusíte importovat modul sys.

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

Dále vytvoříme objekt třídy QWidget. QWidget je základní třída všech objektů uživatelského rozhraní v Qt a prakticky vše, co vidíte v aplikaci, je widget. To zahrnuje dialogy, texty, tlačítka, pruhy a tak dále. Funkce, která vám umožňuje navrhovat složitá uživatelská rozhraní, spočívá v tom, že widgety lze vnořovat, tj. můžete mít widget uvnitř widgetu, který je uvnitř dalšího widgetu. To uvidíte v akci v další části.

w.resize(300,300)

Metoda změny velikosti třídy QWidget umožňuje nastavit rozměry libovolného widgetu. V tomto případě jste změnili velikost okna na 300 x 300 pixelů.

Zde byste si měli uvědomit, že widgety mohou být vnořené dohromady; nejvzdálenější widget (tj. widget bez rodiče) se nazývá Okno.

w.setWindowTitle("Guru99")

Metoda setWindowTitle() umožňuje předat řetězec jako argument, který nastaví název okna na předaný řetězec. V příkladu PyQt5 se zobrazí záhlaví okna. Guru99.

w.show()

show() jednoduše zobrazí widget na obrazovce monitoru.

sys.exit(app.exec_())

Metoda app.exec_() spustí Qt/C++ smyčka událostí. Jak víte, PyQt je z velké části napsán v C++ a používá mechanismus smyčky událostí k implementaci paralelního provádění. app.exec_() předá řízení Qt, který ukončí aplikaci pouze tehdy, když ji uživatel zavře z grafického rozhraní. Proto ctrl+c neukončí aplikaci jako v jiných Python programy. Protože Qt má nad aplikací kontrolu, Python události se nezpracovávají, pokud je nenastavíme uvnitř aplikace. Všimněte si také, že metoda exec má ve svém názvu podtržítko; je to proto, že exec() již bylo klíčovým slovem v Python a podtržítko řeší konflikt pojmenování.

Za prázdnými okny

V předchozí části jste si ukázali, jak v Qt vytvořit základní widget. Nyní je čas vytvořit složitější rozhraní, se kterými mohou uživatelé skutečně interagovat. Znovu spusťte IDLE a napište následující.

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

Uložte soubor jako appone.py nebo jakkoli chcete a stisknutím klávesy F5 spusťte program. Pokud jste neudělali žádné chyby, IDLE otevře nové okno s nějakým textem a tlačítkem, jak je uvedeno níže.

Více než prázdné Windows

  1. Jakmile kliknete na tlačítko v prvním okně, otevře se nové okno se zprávou s textem, který jste napsali.
  2. Nyní můžete kliknout na tlačítko Skrýt podrobnosti/Zobrazit podrobnosti a přepnout viditelnost dalšího textu.

Jak vidíte, jelikož jsme v okně se zprávou nenastavili žádný název okna, byl zadán výchozí název pomocí Python sám.

Nyní, když to funguje, se podívejme na dodatečný kód, který jste přidali do předchozího příkladu PyQt5.

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

Toto importuje některé další widgety, které jste použili v příkladech PyQt5, jmenovitě QLabel, QPushButton a 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_()

Zde jste definovali metodu nazvanou dialog, která vytvoří widget schránky zpráv a nastaví nějaký text do tlačítek a dalších polí.

Dialogová metoda je volána z hlavního bloku programu, když je stisknuto tlačítko v určitém widgetu (v tomto případě btn PushButton). Událost kliknutí spuštěná na tomto tlačítku způsobí provedení této funkce. Taková funkce se v Qt nazývá slot a dozvíte se o ní více signály a sloty v následujících odstavcích.

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

Toto je hlavní část aplikace a stejně jako v předchozím příkladu začínáte vytvořením instance QApplication, po níž následuje jednoduchý widget, tj. instance QWidget.

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

Do této aplikace jste přidali dva nové widgety: QLabel a QPushButton. QLabel se používá k tisku neupravitelného textu nebo zástupných symbolů uvnitř widgetu, zatímco QPushButton se používá k vytvoření tlačítka, na které lze kliknout.

Kritická věc, kterou si zde musíte všimnout, je, že když vytváříte objekty label a btn, předáváte objekt okna (w) konstruktorům QLabel a QPushButton. Takto funguje vnořování v PyQt5. Chcete-li vytvořit widget v jiném widgetu, předáte odkaz na rodičovský widget konstruktoru potomka.

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

move() se používá k nastavení pozice widgetu vzhledem k jeho rodičovskému widgetu. V prvním případě se štítek přesune o 100 pixelů zleva a 130 pixelů z horní části okna.

Podobně bude tlačítko umístěno 110px zleva a 150px z horní části okna. Tento příklad je hrubý způsob, jak dosáhnout rozložení a obecně se nepoužívá ve výrobě; je zde zahrnut pouze pro účely učení. Qt podporuje různá rozložení, která podrobně uvidíte v nadcházejících částech tohoto tutoriálu PyQt.

btn.clicked.connect(dialog)

Nakonec je zde příklad signálů a slotů v Qt. V aplikacích s grafickým uživatelským rozhraním se funkce provádějí na základě akcí provedených uživatelem, jako je najetí myší na prvek nebo kliknutí na tlačítko. Tyto akce se nazývají akce. Připomeňme, že metoda app.exec_() přenáší řízení na Qt událost smyčka. K tomu slouží smyčka událostí: naslouchání událostem a provádění akcí v reakci.

Kdykoli dojde k události, jako když uživatel klikne na tlačítko, odpovídající widget Qt vyvolá a signál. Tyto signály lze připojit Python funkce (jako dialogová funkce v tomto příkladu), takže funkce se provede, když je spuštěn signál. Tyto funkce se nazývají sloty v Qt žargonu.

Základní syntaxe pro spuštění slotové funkce v reakci na signál z události je následně následující:

 widget.signal.connect(slot)

To znamená, že kdykoli signál je spuštěna a Widget, připojený štěrbina funkce bude provedena. Stručně řečeno, signály a sloty používá Qt ke komunikaci mezi objekty a usnadňuje opětovné použití komponent a interaktivitu.

Nyní, když víte, jak vnořovat widgety a implementovat interakce pomocí signálů a slotů, zde je seznam užitečných widgetů a dalších tříd, které můžete použít ve svých aplikacích PyQt.

Komponenty a widgety

V PyQt je k dispozici velké množství widgetů pro vytváření GUI aplikací. S PyQt5 však došlo k přeskupení tříd do různých modulů a revizí v licencích.

Proto je zásadní mít obecný přehled o struktuře PyQt5. V této části uvidíte, jak je PyQt5 interně organizován, a dozvíte se o různých modulech, knihovnách a třídách API, které PyQt5 poskytuje.

Adresářová struktura PyQt5

Adresářová struktura PyQt5

Toto jsou základní moduly, které používá Python's Qt binding, konkrétně PyQt5.

  • QtKombinuje všechny níže uvedené třídy/moduly do jednoho modulu. Výrazně zvyšuje paměť využívanou aplikací. Správa frameworku je však snazší importem pouze jednoho modulu.
  • QtCore: Obsahuje základní negrafické třídy používané jinými moduly. Zde je implementována smyčka událostí Qt, signály a slotová konektivita atd.
  • QtWidgetsObsahuje většinu widgetů dostupných v PyQt5.
  • QtGui: Obsahuje komponenty GUI a rozšiřuje modul QtCore.
  • QtNetwork: Obsahuje třídy používané k implementaci síťového programování prostřednictvím Qt. Podporuje servery TCP, sokety TCP, sokety UDP, zpracování SSL, síťové relace a vyhledávání DNS.
  • QtMultimedia: poskytuje multimediální funkce nízké úrovně.
  • QtSql: implementuje integraci databáze pro databáze SQL. Podporuje ODBC, MySQL, Oracle, SQLite, a PostgreSQL.

Widgety PyQt5

Zde je seznam nejčastěji používaných widgetů v PyQt5:

  • QLineEdit: Toto je vstupní pole, které umožňuje uživateli zadat jeden řádek textu.
line = QLineEdit()
  • QRadioButtonToto je vstupní pole s tlačítkem, které lze vybrat, podobné přepínačům v HTML.
rad = QRadioButton("button title")
rad.setChecked(True)  #to select the button by default.
  • QComboBox: Používá se k zobrazení rozbalovací nabídky se seznamem volitelných položek.
drop = QComboBox(w)
drop.addItems(["item one", "item two", "item three"])
  • QCheckBox: Zobrazí volitelný čtvercový rámeček před štítkem, který je zaškrtnutý, pokud je vybrán, podobně jako přepínače.
check = QCheckBox("button title")
  • QMenuBarZobrazuje vodorovný panel nabídek v horní části okna. Do tohoto panelu můžete přidávat pouze objekty třídy QMenu. Tyto objekty QMenu mohou dále obsahovat řetězce, objekty QAction nebo jiné objekty QMenu.
  • QToolBar: Je to vodorovný pruh nebo panel, který lze v okně přesouvat. Může obsahovat tlačítka a další widgety.
  • QTab: Slouží k rozdělení obsahu okna na více stránek, ke kterým lze přistupovat prostřednictvím různých záložek v horní části widgetu. Skládá se ze dvou částí: panelu záložek a stránky záložek.
  • QScrollBarPoužívá se k vytvoření posuvníků, které umožňují uživateli posouvat se nahoru a dolů v okně. Skládá se z pohyblivého posuvníku, posuvníku track a dvě tlačítka pro posouvání posuvníku nahoru nebo dolů.
scroll = QScrollBar()
  • QSplitter: Rozdělovače se používají k oddělení obsahu okna, aby byly widgety správně seskupeny a nepůsobily přeplněně. QSplitter je jedním z primárních ovladačů rozvržení dostupných v PyQt5 a používá se k horizontálnímu i vertikálnímu rozdělení obsahu.
  • QDockDokovací widget je podokno se dvěma vlastnostmi: lze jej přesouvat v rámci hlavního okna a lze jej ukotvit mimo nadřazené okno na jiné místo na obrazovce.

Rozvržení a motivy

V předchozích příkladech PyQt5 jste k nastavení pozic widgetů ve vašem GUI používali pouze metody move() a resize().

PyQt má však robustní modul pro správu rozložení, který lze použít k vytvoření pokročilých uživatelských rozhraní pro aplikace. V této části se dozvíte o dvou důležitých třídách, které se v Qt používají k vytváření a správě rozvržení.

  1. QBoxNákres
  2. QGridLayout

QBoxNákres

QBoxRozvržení se používá k zarovnání podřízených widgetů rozvržení do vodorovného nebo svislého řádku. Dvě zájmové třídy, které dědí od QBoxRozložení jsou:

  • QHBoxRozvržení: používá se k horizontálnímu lemování podřízených widgetů.
  • QVBoxRozvržení: používá se k vertikálnímu zarovnání podřízených widgetů.

Například takto jsou tři tlačítka zarovnána s QHBoxRozložení bude vypadat.

QBoxNákres

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

A takhle budou vypadat v QVBoxRozvržení.

QBoxNákres

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

Jedinou funkcí, která v tomto okamžiku potřebuje nějaké vysvětlení, je metoda addWidget(). Slouží k vkládání widgetů do HBox nebo VBox rozložení. Používá se také v jiných rozloženích, kde vyžaduje jiný počet parametrů, jak uvidíte v další části. Widgety se zobrazí uvnitř rozvržení v pořadí, v jakém je vložíte.

QGridLayout

QGridLayout se používá k vytváření rozhraní, ve kterých jsou widgety uspořádány ve formě mřížky (jako matice nebo 2D pole). Chcete-li vložit prvky do rozvržení mřížky, můžete pomocí maticové reprezentace definovat počet řádků a sloupců v mřížce a také polohu těchto prvků.

Chcete-li například vytvořit mřížku 3*3 (tj. mřížku se třemi řádky a třemi sloupci), napíšete následující kód:

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

Toto bude výstup:

QGridLayout

Metoda addWidget() v rozvržení mřížky přijímá tyto argumenty:

  • Objekt widgetu, který chcete přidat do mřížky
  • X-ová souřadnice objektu
  • Y-ová souřadnice objektu
  • Rozpětí řádků (výchozí = 0)
  • Rozsah sloupců (výchozí = 0)

Pro lepší pochopení můžete každý widget vložit ručně, jak je znázorněno níže.

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

Takto bude mřížka vypadat:

QGridLayout

Parametry rowspan a colspan můžete také předat metodě addWidget() a pokrýt tak více než jeden řádek nebo sloupec.

Například,

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

Vznikne tak tlačítko, které se natáhne přes oba sloupce.

QGridLayout

Témata

PyQt5 přichází s některými vestavěnými motivy, které můžete použít ve svých aplikacích. The setStyle() metoda volaná na instanci QApplication se používá k nastavení konkrétního motivu pro vaši aplikaci.

Například přidáním následujícího řádku kódu se změní téma vaší aplikace z výchozího na Fusion.

app.setStyle("Fusion")

Takto bude vypadat předchozí příklad v šabloně Fusion.

Témata

Další užitečnou funkcí pro úpravu témat vašich aplikací je metoda setPalette(). Zde je kód pro změnu barvy různých widgetů pomocí 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_())

Zde je výsledek.

Témata

Chcete-li použít metodu setPalette(), musíte nejprve definovat paletu. To se provádí vytvořením objektu třídy QPalette.

 qp = QPalette()

Všimněte si, že třída QPalette patří do modulu QtGui a pro její fungování ji budete muset importovat. Jakmile vytvoříte objekt QPalette, použijte metodu setColor() k předání názvu widgetu, jehož barvu chcete změnit, a barvy, kterou chcete nastavit.

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

Tím se změní barva okna na černou. Po definování barevného schématu použijte funkci setPalette() k aplikaci palety ve vaší aplikaci.

app.setPalette(qp)

To je vše, co musíte udělat, pokud chcete pro svou aplikaci vytvořit základní motivy. PyQt vám také umožňuje používat šablony stylů k definování vzhledu vašich widgetů. Pokud jste obeznámeni s CSS, můžete snadno definovat pokročilé styly pro svou aplikaci pomocí Qt Style Sheets.

Nejčastější dotazy

Tkinter je dodáván s Python a hodí se pro malé, jednoduché nástroje. PyQt nabízí mnohem více widgetů, vizuální designér a nativní vzhled, což ho činí lepším pro velké, profesionální desktopové aplikace – za cenu strmější křivky učení a licence GPL.

Oba vážou stejné knihovny Qt a sdílejí téměř identická API. Klíčovým rozdílem je licencování: PyQt používá GPL nebo placenou komerční licenci, zatímco PySide (Qt pro Python) používá licenci LGPL, která umožňuje bezplatnou distribuci uzavřeného zdrojového kódu.

Qt Designer je nástroj pro drag-and-drop, který ukládá rozvržení jako soubor XML .ui. Převeďte ho do formátu Python pomocí utility pyuic5 nebo jej načtěte za běhu pomocí uic.loadUi().

PyQt6 se váže na novější framework Qt 6 a vyžaduje plně vymezené výčty, jako například Qt.AlignmentFlag.AlignLeft. PyQt5 cílí na Qt 5 a zůstává nejpoužívanější verzí. PyQt6 také ruší některé zastaralé moduly a přidává lepší podporu pro vysoké DPI.

Použijte PyInstaller: spusťte pyinstaller –onefile –windowed app.py pro sloučení skriptu, PyQt5 a knihoven Qt do jednoho spustitelného souboru. Příznak –windowed skryje konzoli. Oblíbenými alternativami jsou fbs a cx_Freeze.

PyQt5 je vhodný pro začátečníky, pokud znáte základy. PythonNejvíce pomůže pochopení tříd, objektů a vzoru signals-and-slots. Qt Designer umožňuje vizuálně vytvářet rozvržení, takže si můžete vytvořit funkční okna, než se ručně naučíte každý widget.

PyQt vytváří desktopová front-endová rozhraní pro modely strojového učení – dashboardy, které načítají data, spouštějí trénink nebo inferenci a zobrazují predikce, grafy nebo obrázky. Dobře se hodí k NumPy, Pandas a Matplotlib, wrap.ping trénovaný model v uživatelsky přívětivém grafickém rozhraní.

Ano. GitHub Copilot automaticky dokončuje běžné vzory PyQt5, jako je nastavení QApplication, vytváření widgetů a propojení signál-slot z komentáře nebo názvu funkce. Vždy spusťte vygenerované okno, abyste ověřili, že se rozvržení a obslužné rutiny událostí chovají podle očekávání.

Shrňte tento příspěvek takto: