PyQt

Den aktuelle version af siden er endnu ikke blevet gennemgået af erfarne bidragydere og kan afvige væsentligt fra den version , der blev gennemgået den 29. oktober 2020; checks kræver 46 redigeringer .
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] .

Oversigt over hovedmodulerne

GUI designer

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] .

Programeksempler

Hej verden!

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

Et mere komplekst eksempel

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

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] .

Licensfunktioner

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.

Historie

Riverbank Computing Limited har udviklet og vedligeholdt PyQt siden 1998, de bindinger, der gør det muligt at bruge Qt med Python-programmeringssproget [1] .

  • Udviklingen begyndte med skabelsen af ​​SIP og frigivelsen af ​​PyQt 0.1 med Qt 1.41-understøttelse i november 1998 [12] ;
  • version 2.0, som blev udgivet i 2000, implementerede understøttelse af Qt 2.2 på Linux og Windows [12] ;
  • støtte til Qt 3 blev implementeret i 2001 [12] ;
  • understøttelse af Mac OS X blev implementeret i 2002 [12] ;
  • PyQt4-udgivelsen startede med PyQt 4.0 med Qt 4-understøttelse i juni 2006 [12] ;
  • version 4.5, som blev udgivet den 5. juni 2009, understøtter Python 3 [13] ;
  • version 4.7, som blev udgivet den 14. januar 2010, understøtter Qt 4.6 [14] ;
  • version 5.0, som blev udgivet den 17. juni 2013, understøtter Qt 5.0 [15] .

Bemærkelsesværdige programmer, der bruger PyQt

  • Cura [16] er en open source 3D-modeludskæringsapplikation til 3D-printere.
  • Electrum [17] er en populær open source Bitcoin-crypto-pung.
  • Arduino IDE er en implementering af Arduino på PyQt.
  • Jabbim er et open source-instant messaging-program på  tværs af platforme , der bruger XMPP-protokollen .
  • Eric IDE  - et integreret udviklingsmiljø for Python;
  • GNS3  er en grafisk netværkssimulator.
  • Anki er et program, der gør det lettere at huske ord, udtryk og enhver anden information ved hjælp af gentagelser med mellemrum.
  • Caliber , en applikation til administration af e-bøger
  • Dropbox , filhosting
  • fman , en filhåndtering på tværs af platforme
  • Kodos , Python Regular Expression Debugger
  • Leo , læsekyndig programmeringsplanlægger og redaktør
  • Ninja-IDE , et udvidelsesbart open source Python-udviklingsmiljø
  • OpenLP , et open source tekstprojektionsprogram
  • OpenShot , et videoredigeringsprogram
  • Orange , en datamining- og visualiseringsramme
  • Puddletag , en open source cross-platform ID3 tag editor
  • QGIS , gratis Geographic Information Systems (GIS) desktop-software
  • qt-recordMyDesktop , Qt4-grænseflade til recordMyDesktop
  • Spyder , Python Data Science IDE
  • TortoiseHg , GUI for Mercurials kildestyringsprogram (Hg)
  • Veusz , en videnskabelig tegneapplikation
  • qutebrowser [18] , en Vim-lignende webbrowser med en minimalistisk grænseflade.

Ansøgning

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] .

Se også

Noter

  1. 1 2 Riverbank  Computing . Nokia hjemmeside . Dato for adgang: 10. maj 2010. Arkiveret fra originalen 4. marts 2012.
  2. 1 2 Hvad er PyQt?  (engelsk) . Pyqt websted. Dato for adgang: 10. maj 2010. Arkiveret fra originalen 4. marts 2012.
  3. PyQt  hvidbog . Pyqt websted. Dato for adgang: 10. maj 2010. Arkiveret fra originalen 4. marts 2012.
  4. Eric Python IDE  . Eric IDE hjemmeside. Dato for adgang: 10. maj 2010. Arkiveret fra originalen 4. marts 2012.
  5. Om PyQt  . Python Wiki. Dato for adgang: 10. maj 2010. Arkiveret fra originalen 4. marts 2012.
  6. PyQt4  . _ Python Wiki. Dato for adgang: 10. maj 2010. Arkiveret fra originalen 4. marts 2012.
  7. GUI- designer  . Nokia . Dato for adgang: 10. maj 2010. Arkiveret fra originalen 4. marts 2012.
  8. ↑ Introduktion - SIP  . Pyqt websted. Hentet 14. august 2010. Arkiveret fra originalen 4. marts 2012.
  9. 1 2 Phil Thompson taler om PyQt  . KDE.news. Hentet 13. august 2010. Arkiveret fra originalen 4. marts 2012.
  10. Licens  . _ Pyqt websted. Dato for adgang: 10. maj 2010. Arkiveret fra originalen 4. marts 2012.
  11. Ofte stillede spørgsmål  om PySide . Pyside hjemmeside. Dato for adgang: 10. maj 2010. Arkiveret fra originalen 4. marts 2012.
  12. 1 2 3 4 5 Mark Summerfield. Hurtig GUI-programmering med Python og Qt . — 1. - Prentice Hall, 2008. - 648 s. — ISBN 978-0132354189 .
  13. PyQt v4.5 udgivet  . Pyqt websted. Dato for adgang: 10. maj 2010. Arkiveret fra originalen 4. marts 2012.
  14. PyQt v4.7 udgivet  . Pyqt websted. Dato for adgang: 10. maj 2010. Arkiveret fra originalen 4. marts 2012.
  15. PyQt v5.0 udgivet  . Pyqt websted. Hentet 2. juli 2013. Arkiveret fra originalen 2. juli 2013.
  16. Ultimaker Cura GitHub . Hentet 28. maj 2020. Arkiveret fra originalen 17. september 2020.
  17. Electrum Bitcoin GitHub . Hentet 28. maj 2020. Arkiveret fra originalen 10. maj 2020.
  18. qutebrowser . Hentet 20. december 2021. Arkiveret fra originalen 20. december 2021.

Litteratur

Links