PyQt | |
---|---|
Qt Designer på Linux med KDE Plasma 5 | |
Type | Qt-binding til Python |
Udvikler | Riverbank Computing |
Skrevet i | C++ , Python |
Operativ system | Multi-platform software (Windows, MacOS, Unix) |
Første udgave | 1998 |
nyeste version | 6.3.1 ( 17. juni 2022 ) |
Licens | GPL2 , GPL3 og kommercielle |
Internet side | riverbankcomputing.com/s... |
Mediefiler på Wikimedia Commons |
PyQt er et sæt udvidelser (bindinger) til den grafiske Qt - ramme for programmeringssproget Python , implementeret som en Python- udvidelse .
PyQt er udviklet af det britiske firma Riverbank Computing [1] . PyQt kører på alle platforme, der understøttes af Qt: Linux og andre UNIX-lignende operativsystemer , macOS og Windows . Der er 3 versioner: PyQt6, PyQt5 og PyQt4, der understøtter de respektive versioner af Qt. PyQt distribueres under GPL (version 2 og 3) og kommercielle licenser [2] .
PyQt implementerer næsten fuldstændigt funktionerne i Qt. Disse er mere end 600 klasser [3] , mere end 6000 funktioner og metoder, herunder:
PyQt inkluderer også Qt Designer ( Qt Creator ), en GUI-designer. Pyuic-programmet genererer Python-kode fra filer oprettet i Qt Designer. Dette gør PyQt til et meget nyttigt værktøj til hurtig prototyping. Derudover kan du tilføje nye grafiske kontroller skrevet i Python til Qt Designer.
Tidligere var PyQt bundtet med Eric - udviklingsmiljøet , skrevet i PyQt. Eric har en indbygget debugger og kan bruges til at lave konsolprogrammer. Det er nu tilgængeligt som et separat projekt [4] [5] [6] .
Qt Designer er en cross-platform GUI layout og form builder. Det giver dig mulighed for hurtigt at designe widgets og dialogbokse ved hjælp af skærmformularer ved hjælp af de samme widgets, som vil blive brugt i applikationen. Formularer oprettet med Qt Designer er fuldt funktionelle og kan også ses i realtid [7] .
Et standard minimalistisk eksempel, der giver en idé om PyQt. Programmet viser et tomt vindue med grundlæggende funktioner - ændring af størrelse, minimering, maksimering:
#! /usr/bin/env python2 # -*- kodning: utf-8 -*- # import sys fra PyQt4.QtGui import * # grænsefladekomponenter # Hver applikation skal oprette et QApplication - objekt # sys.argv - liste over kommandolinjeargumenter application = QApplication ( sys . argv ) # QWidget er basisklassen for alle brugergrænseflade # objekter; hvis du bruger en konstruktør # uden en forælder til en widget, bliver denne widget en vindueswidget = QWidget () widget . resize ( 320 , 240 ) # resize widget- widget . setWindowTitle ( "Hej, verden!" ) # sæt widgettitlen . vis () # vis vinduet på skærmen sys . exit ( application . exec_ ()) # start hovedapplikationsløkken |
Dette eksempel viser principperne for at skabe mere seriøse programmer. Brugt af Python 3 og Qt Designer. En objektorienteret tilgang bruges til at adskille den visuelle repræsentation og programlogik.
Program sammensætning:
Indholdet af test.pyw filen er :
#! /usr/bin/env python3 # import sys fra PyQt4 import QtCore , QtGui # inkluderer hoved PyQt-modulerne import mainform # inkluderer formularbeskrivelsesmodulet def main (): app = QtGui . QApplication ( sys . argv ) # opretter hovedprogramobjektet form = mainform . MainForm () # opretter et formularobjekt . show () # instruerer at vise formularobjektet og indholdsretur - appen . exec () # starter applikationen hvis __navn__ == "__main__" : sys . exit ( hoved ())Indhold af mainform.py -filen :
#! /usr/bin/env python3 # fra PyQt4 import QtCore , QtGui , uic # inkluderer kerne PyQt-moduler # hovedform prototype klasse MainForm ( QtGui . QDialog ): # constructor def __init__ ( selv ): super ( MainForm , self ) . __init__ () # indlæser dynamisk den visuelle repræsentation af formen uic . loadUi ( "mainform.ui" , selv ) # binder knapklik-hændelsen til selvmetoden . connect ( self . pushButton , QtCore . SIGNAL ( "clicked()" ), self . setLabelText ) def setLabelText ( selv ): selv . etiket . setText ( "Ny etikettekst" )I dette eksempel leveres ret simpel funktionalitet af metoden setLabelText . Men hvis det er nødvendigt at implementere mere kompleks behandling af indgående data, er det tilrådeligt at flytte denne behandling til et separat modul (fil).
SIP er et værktøj til automatisk at generere Python-bindinger til C- og C++-biblioteker. SIP blev oprindeligt udviklet i 1998 til PyQt, en Python-binding til Qt-widget-værktøjssættet, men er også velegnet til binding til andre C- eller C++-biblioteker [8] .
SIP tager et sæt instruktioner (.sip-filer), der beskriver API'et og genererer den nødvendige C++-kode. Derefter kompileres og outputtet er et Python-modul. .sip-filerne er klasseheader-filer med nogle ting fjernet (fordi SIP ikke indeholder en fuld C++-parser) og nogle ting tilføjet (fordi C++ ikke indeholder nok information om, hvordan API'en fungerer).
PyQt4 bruger et internt værktøj (skrevet i PyQt) kaldet metasip. Dette er en slags IDE til SIP. Den bruger GCC -XML til at parse de seneste header-filer og gemme de relevante data i XML til et metasip-projekt. metasip gør derefter en slags forskel med den tidligere version af API'en og noterer eventuelle ændringer, der skal gennemgås. Listen over ændringer genereres derefter ved hjælp af GUI og indtastes automatisk i TODO . Oprettelse af .sip-filer er kun et klik væk.
Hvad angår hvordan den genererede kode fungerer, adskiller den sig ikke meget fra hvordan enhver anden bindingsgenerator fungerer. Python har et meget godt modul-API, hvilket er en af årsagerne til det store antal Python-bindinger til tredjepartsværktøjer. For hver C++-klasse genererer SIP C-kode, der skaber den tilsvarende Python-klasse [9] .
Den dobbelte licens til PyQt er dikteret af ret komplekse forhold i omfanget af denne tilføjelse (binding) over Qt-grafikbiblioteket. Under GPL-licensen kan biblioteket bruges til at skabe open source-programmer . Hvis det ikke er muligt at distribuere koden i overensstemmelse med betingelserne i GPL, kan du købe en kommerciel licens [10] .
Fra Nokias side var der forsøg på at forhandle med Riverbank Computing om emnet at ændre licensen, men de lykkedes ikke. Resultatet blev et projekt kaldet PySide [11] - en analog af PyQt, herunder opretholdelse af kompatibilitet med sidstnævnte på API-niveau, men udgivet under LGPL -licensen for at gøre det muligt for udviklere og kommercielle projekter at bruge Python gratis i forbindelse med Qt.
Riverbank udelukker dog ikke muligheden for at licensere PyQt under LGPL i fremtiden.
Riverbank Computing Limited har udviklet og vedligeholdt PyQt siden 1998, de bindinger, der gør det muligt at bruge Qt med Python-programmeringssproget [1] .
PyQt er et produkt med en bred brugerbase. Kommercielle brugere af PyQt omfatter så velkendte virksomheder som Disney , Dreamworks , Pixar , Industrial Light and Magic og Sony Pictures . Der er mere end 200 kommercielle brugere i alt (ifølge data i 2006) [9] .
Qt | |
---|---|
Teknologi | |
Værktøjer | |
Indbindinger | |
relaterede emner |
Python | |
---|---|
Fællesskab | |
Implementeringer | |
Andet |
|
Gratis og open source software | |
---|---|
Det vigtigste |
|
Fællesskab |
|
Organisationer | |
Licenser | |
Problemer | |
Andet |
|
|
af GUI-elementer | Værktøjssæt (sæt)|||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
lavt niveau |
| ||||||||||||||||||||||||||
højt niveau |
|