Inhoudsopgave
Python is een programmeertaal waarop de kenmerk van multiparadigma zijn zoals maakt programmeren met een objectgeoriënteerd en functioneel paradigma mogelijk, heeft een gestandaardiseerde bibliotheek.Er zijn veel Python-tools en -bibliotheken om software en webapplicaties te ontwikkelen, in het geval van schermontwerp kunnen we verschillende bibliotheken gebruiken, zoals: wxPython, PyQt, PySide of PyGTK om onze interface en vervolgens te programmeren, zijn er ook webframeworks zoals Django, in deze tutorial zullen we zien hoe je platformonafhankelijke desktop-applicaties kunt maken met PyQT 5.
PyQt5 is een Bibliotheek met Python-tools voor hem QT5-framework. Het is beschikbaar voor Python 3.x.
PyQt5 is geïmplementeerd als een set Python-modules. Het stelt ons in staat om de ontwerpen die we maken te koppelen met QT Designer en ze vervolgens te kunnen vertalen met Py Qt zodat ze uitvoerbaar zijn onder Python in alle besturingssystemen zoals Linux Windows en Mac OS.
Om applicaties te ontwikkelen, moeten we de nodige programma's en afhankelijkheden installeren.Deze tutorial zal een versie van Linux Mint als besturingssysteem gebruiken, maar het kan worden aangepast aan elk besturingssysteem.
In andere tutorials gebruiken we Qt om te programmeren in C++, Multiplatform Programming in C++ en Qt onder GNU/Linux Environment en QT Programming en SQLite databases.
Laten we eerst QT Designer 5 installeren, vanuit een terminalvenster downloaden en installeren we het
$ wget http://download.qt-project.org/official_releases/qt/5.3/5.3.0/qt-Abrirsource-linux-x64-5.3.0.run $ chmod + x qt-Abrirsource-linux-x64-5.3 .0.run $ sudo ./qt-Abrirsource-linux-x64-5.3.0.runVervolgens moeten we de Python-ontwikkelingsbibliotheken installeren:
sudo apt-get install pyqt5-dev-toolsVervolgens moeten we een Python-extensie installeren met de naam SIP, een codegenerator die speciaal is ontworpen voor het maken van Python-code. Hierdoor kan het Qt Designer-ontwerpbestand worden gelezen en vertaald in Python-code. De gegenereerde code kan worden gecompileerd voor Python v2 en v3.
We downloaden SIP van de officiële website, dan gaan we naar de map waar we het hebben gedownload, unzip het bestand sip-4.17.tar.gz, openen de map en configureren SIP en installeren met de volgende code vanuit het terminalvenster.
python configure.py make make installWe stellen QT5 in als de standaardversie:
sudo apt-get install qt5-defaultTen slotte downloaden en installeren we PyQt, de bibliotheken die we nodig hebben om Python en QT Designer te koppelen
Download PyQt van zijn officiële website, dan gaan we naar de map waar we het hebben gedownload, unzip het PyQt-bestand en open de map en configureer het met de volgende code vanuit het terminalvenster.
python configure.pyWe gaan een eenvoudige applicatie maken van Qt designer, we zullen het ontwerp maken door een formulier in te nemen, we zijn alleen geïnteresseerd in het bestand met de ui-extensie die de ontwerpinterface zal zijn. Ons project heet Dialoga.
Vervolgens zullen we het type venster selecteren dat onze applicatie zal gebruiken, in dit geval zullen we een dialoog met twee knoppen als sjabloon gebruiken.
Dan hebben we het scherm met ons venster om te ontwerpen, we voegen een teksteditor toe en slaan het bestand op
Dan gaan we naar de projectenmap, de bijbehorende c++-bestanden zijn ook gegenereerd, maar we zullen alleen het ui-bestand gebruiken.
Vervolgens zullen we vanuit de terminal het bestand dialoga.ui in python moeten vertalen, vanuit het terminalvenster gebruiken we de volgende opdracht:
pyuic5 -o dialoga.py dialoga.uiDit genereert het bestand dialog.py, het ontwerp dat we hadden in c ++ nu beschikbaar in Python, de code is als volgt
# - * - codering: utf-8 - * - # Formulierimplementatie gegenereerd door het lezen van het ui-bestand 'dialoga.ui' # # Gemaakt: ma 26 okt 21:31:56 2015 # door: PyQt5 UI-codegenerator 5.2.1 van PyQt5 import QtCore, QtGui, QtWidgets klasse Ui_DialogA (object): def setupUi (self, DialogA): DialogA.setObjectName ("DialogA") DialogA.resize (400, 300) self.buttonBox = QtWidgets.QDialogButtonBox (DialogA) self.buttonBox ( DialogA) zelf.setGeometry (QtCore.QRect (30, 240, 341, 32)) self.buttonBox.setOrientation (QtCore.Qt.Horizontal) self.buttonBox.setStandardButtons (QtWidgets.QDialogButtonBox.Cancel | QtWidtoniabutton.OsetOlogtonQsetOsetOlogtonQsetOsetOlogtonQsetOsetOlogtonQ ("buttonBox") self.textEdit = QtWidgets.QTextEdit (DialogA) self.textEdit.setGeometry (QtCore.QRect (20, 20, 361, 201)) self.textEdit.setObjectName ("textEdit") self.retranslateUi (DialogA ) self.buttonBox.accepted.connect (DialogA.accept) self.buttonBox.rejected.connect (DialogA.reject) QtCore.QMetaObject.connectSlotsByName (DialogA) def retranslateUi (self, DialogA): _translate = QtCore.QCoreAp plication.translate DialogA.setWindowTitle (_translate ("DialogA", "Dialog"))Dit is alles wat we ontwerpen in Qt Designer, nu moeten we het koppelen aan een code die het gebruikt, hiervoor zullen we een bestand startup.py maken en de volgende code schrijven:
import sys uit PyQt5.QtWidgets import QApplication, QDialog uit dialoga import * app = QApplication (sys.argv) window = QDialog () ui = Ui_DialogA () ui.setupUi (window) window.show () sys.exit (app.exec_ ())We zien dat we de grafische weergavebibliotheken importeren en het bestandsdialoogvenster met het ontwerp importeren.
Vervolgens geven we aan dat het venster een dialoogvenster zal zijn, het ui-venster zal het ontwerp hebben dat is gedefinieerd in de klasse Ui_DialogA () die is gedefinieerd in het ontwerpbestand en tenslotte wordt dat ontwerp aan het venster toegewezen via de functie setupUi.
We bewaren en voeren het als volgt uit vanuit het opdrachtvenster:
python3 home.pyWe gaan hieronder een eenvoudige maar functionele teksteditor maken. We zullen een nieuw project maken waarin we geïnteresseerd zijn in het maken van de grafische interfaces. We zullen het project MyEditor noemen.
We selecteren vervolgens MainWindow als sjabloon. In het ontwerp kunnen we een menu en een tekstedit hebben. Hier is het belangrijk om elk object een naam te geven, zodat het later kan worden geïdentificeerd en ernaar kan worden verwezen vanuit de Python-code. Vervolgens slaan we het op en converteren het ui-bestand naar python.
We doen de conversie vanuit het terminalvenster met de volgende opdracht:
pyuic5 -o mieditor.py mieditor.uiDe ontwerpcode in python is de volgende:
# - * - codering: utf-8 - * - # Formulierimplementatie gegenereerd door het lezen van ui-bestand '/testqt/mieditor.ui' # # Gemaakt: ma 26 okt 10:32:56 2015 # door: PyQt5 UI-codegenerator 5.2. 1 # # WAARSCHUWING! Alle wijzigingen in dit bestand gaan verloren! uit PyQt5 importeer QtCore, QMainWindow, QApplication, QtGui, QtWidgets class Ui_MainWindow (object): def setupUi (self, MainWindow): MainWindow.setObjectName ("MainWindow") MainWindow.resize (533, 317) selfGucentralGuwidget (tiQtcentral.Guwidget) MainWindow) self.centralwidget.setObjectName ("centralwidget") self.gridLayout = QtGui.QGridLayout (self.centralwidget) self.gridLayout.setObjectName ("gridLayout") self.textEdit = QtGui.QTextEdit (self.centraldit.) Self.text (self.centraldit.) Self.textEdit (self.centraldit.) setObjectName ("textEdit") self.gridLayout.addWidget (self.textEdit, 0, 0, 1, 1) MainWindow.setCentralWidget (self.centralwidget) self.menubar = QtGui.QMenuBar (Hoofdvenster) self.menubar.setGeometry (QtCore. QRect (0, 0, 533, 25)) self.menubar.setObjectName ("menubalk") self.menu_File = QtGui.QMenu (self.menubar) zelf. menu_File.setObjectName ("menu_File") self.menu_Help = QtGui.QMenu (self.menubar) self.menu_Help.setObjectName ("menu_Help") MainWindow.setMenuBar (self.menubar) self.statusbar = QtGui.QStatusBar (MainWindow) self. statusbar.setObjectNaam e ("statusbar") MainWindow.setStatusBar (self.statusbar) self.action_New = QtGui.QAction (Hoofdvenster) self.action_Nuevo.setObjectName ("action_New") self.action_Open = QtGui.QAction (Hoofdvenster) self.action_bjectName (Hoofdvenster) self.action_bjectName (SetObjectName) "action_Abrir") self.action_Save = QtGui.QAction (Hoofdvenster) self.action_Save.setObjectName ("action_Save") self.actionSave_As = QtGui.QAction (Hoofdvenster) self.actionSave_As.setObject") self.action_Quit QAction (Hoofdvenster) self.action_Quit.setObjectName ("action_Quit") self.actionA_bout = QtGui.QAction (Hoofdvenster) self.actionA_bout.setObjectName ("actionA_bout") self.action_Help = QtGui.QAction (Hoofdvenster) self. action_Help (Hoofdvenster) self.action_Help "action_Help") self.menu_File.addAction (self.action_New) self.menu_File.addAction (self.action_Open) self.menu_File.addAction (self.action_Save) self.menu_File.addAction (self.menu_As ) self.menu_File (self.ActionSave_As) self.menu_File self.action_Quit) self.menu_Help.addAction (self.actionA_bout) self.menu_Help.addAction (self. action_Help) self.menubar.addAction (self.menu_File.menuAction ()) self.menubar.addAction (self.menu_Help.menuAction ()) self.retranslateUi (Hoofdvenster) QtCore.QObject.connect (self.action_Quit, QtCore.SIGNAL ( self.action_Quit, QtCore.SIGNAL ("triggered ()"), MainWindow.close) QtCore.QMetaObject.connectSlotsByName (MainWindow) def retranslateUi (self, MainWindow): MainWindow.setWindowTitle (QtGui.QApplicationW.translate", MiEditor", None, QApplicationGui ", None, QApplicationGui" .UnicodeUTF8)) self.menu_File.setTitle (QtGui.QApplication.translate ("MainWindow", "& File", None, QtGui.QApplication.UnicodeUTF8)) self.menu_Help. setTitle ("QtGui.QApplication.translate", "QtGui.QApplication.translate" & Help ", Geen, QtGui.QApplication.UnicodeUTF8)) self.action_Nuevo.setText (QtGui.QApplication.translate (" MainWindow "," & New " , Geen, QtGui.QApplication.UnicodeUTF8)) self.action_Abrir.setText (QtGui.Abrir.setText (QtGui.Abrir.setText (QtGui.Abrir.setText) .translate ("Hoofdvenster", "& Open", Geen, QtGui. QApplication.UnicodeUTF8)) self.action_Save.setText (QtGui.QApplication.translate ("Hoofdvenster", "& Opslaan", Geen, QtGui.QApplication.UnicodeUTF8)) self.actionSave_As.setText (QtGui.QApplication.translate ("MainWindow", "Save & As", Geen, QtGui.QApplication.UnicodeUTF8)) self.action_Quit.setText (QtGui.QApplication (" self.translate") MainWindow "," & Exit ", None, QtGui.QApplication.UnicodeUTF8)) self.actionA_bout.setText (QtGui.QApplication.translate (" MainWindow "," To & near ", None, QtGui.QApplication. UnicodeUTFelp8)) self.action_HnicodeUTFelp8)). setText (QtGui.QApplication.translate ("Hoofdvenster", "& Technische ondersteuning", Geen, QtGui.QApplication.UnicodeUTF8))Vervolgens zullen we de code moeten programmeren om functionaliteit aan de editor te geven, waarbij elk menu en het tekstgebied wordt geïnstantieerd, de code is vrij uitgebreid, hier ontwikkelen we alleen het interface-ontwerp en de conversie ervan …
Het maken van de grafische gebruikersinterface met Qt Designer maakt het eenvoudiger om applicaties te ontwerpen en het is ook een geweldig leermiddel omdat de code van ons afhangt.
Met Qt Designer kunt u de eigenschappen van elk onderdeel zien voordat u het vertaalt, programmeren kan ook zonder de grafische interface rechtstreeks in een teksteditor als we de benodigde bibliotheken en hun eigenschappen kennen.
Python kan ook applicaties aan die verbinding maken met databases zoals Mysql of Sqlite, via een verbinding en bewerkingen op databases met Python, we kunnen ook een visuele interface toevoegen aan onze applicatie die is gemaakt met de grafische bibliotheken van Qt met behulp van PyQt. We gaan verder met het programmeren van grafische interfaces voor gebruikers met Python in een andere tutorial.Vond je deze Tutorial leuk en heb je eraan geholpen?Je kunt de auteur belonen door op deze knop te drukken om hem een positief punt te geven