Det grunnleggende om pyqt5

Det grunnleggende om pyqt5
PYQT5 er en Python -modul for GUI Desktop Application Development. Det er tilgjengelig for flere plattformer som Windows, Mac, Linux, iOS og Android. Python tilbyr flere moduler som faktisk er i stand til GUI -utvikling, for eksempel Tkinter, WXPython, Pyside2 og mer. PYQT5 bruker imidlertid mer enn 1000 klasser; Faktisk er PYQT5 en enorm modul! Dessuten inkluderer PYQT5 en QT -designer, en grafisk brukergrensesnittdesigner, som ytterligere letter GUI Creation. Det kan brukes til å lage alt fra mediespillere til nettlesere. I denne opplæringen lærer vi det grunnleggende i PYQT5 -modulen.

La oss først installere PYQT5:

PIP -install PYQT5
PIP installer pyqt5-verktøy

Trinn 1: Opprette det blanke vinduet

Det første trinnet med å lage noe er å sette opp det blanke vinduet. Det blanke vinduet i seg selv krever noen få kodelinjer, så la oss se på det.

Fra PYQT5 importer qtwidgets
Fra PYQT5.QtWidgets importerer qapplication, qMainWindow
Importer Sys
Fra PYQT5 import qtgui
Klassevindu (QTWidgets.Qwidget):
def __init __ (selv):
super().__i det__()

Angi geometrien til vinduet ved å bruke metoden setGeometry (), som tar fire argumenter - den opprinnelige x -posisjonen, den opprinnelige y -posisjonen (med andre ord, der øverste venstre hjørne vises på skjermen), bredden og høyden på den vindu.

selv-.SetGeometry (350, 100, 800, 600)

Angi tittelen på vinduet med SetWindowTitle () -metoden.

selv-.setWindowTitle ("Pyqt5")

Du kan angi ikonet ved hjelp av SetWindowicon (). Merk at ikonet må være 64 piksler med 64 piksler.

selv-.SetWindowicon (Qtgui.Qicon ("Rattle.PNG "))

Hver PYQT5 -fil krever denne neste linjen som tar SYS.argv som et argument.

Application = Qapplication (SYS.argv)

Deretter lager du en forekomst av klassen vi opprettet ovenfor.

Vinn = vindu ()
vinne.forestilling()

For å gå ut av vinduet ved å trykke på X -knappen, trenger vi SYS.Avslutt (søknad.exec ()).

sys.Avslutt (søknad.exec ())

Denne koden vil opprette et tomt vindu. Koden som helhet vil se slik ut:

Fra PYQT5 importer qtwidgets
Fra PYQT5.QtWidgets importerer qapplication, qMainWindow
Importer Sys
Fra PYQT5 import qtgui
Klassevindu (QTWidgets.Qwidget):
def __init __ (selv):
super().__i det__()
selv-.SetGeometry (350, 100, 800, 600)
selv-.setWindowTitle ("Pyqt5")
selv-.SetWindowicon (Qtgui.Qicon ("Rattle.PNG "))
Application = Qapplication (SYS.argv)
Vinn = vindu ()
vinne.forestilling()
sys.Avslutt (søknad.exec ())

Trinn 2: Input Bar

Neste, la oss lage en inngangslinje. En inngangslinje er et sted hvor brukere kan legge til tekst som vi kan hente. Inngangsstenger opprettes ved hjelp av Qwidgets.QlineEdit (). En åpenbart, vi satte dens geometri ved hjelp av SetGeometry () -metoden.

def initui (selv):
selv-.input_bar = qtwidgets.QlineEdit (selv)
selv-.input_bar.setgeometry (150, 250, 500, 40)

Husk deg; Du må fremdeles aktivere funksjonen i __init__ -metoden som følger:

selv-.initui ()

Koden i sin helhet på dette tidspunktet vil se slik ut:

Fra PYQT5 importer qtwidgets
Fra PYQT5.QtWidgets importerer qapplication, qMainWindow
Importer Sys
Fra PYQT5 import qtgui
Klassevindu (QTWidgets.Qwidget):
def __init __ (selv):
super().__i det__()
selv-.SetGeometry (350, 100, 800, 600)
selv-.setWindowTitle ("Pyqt5")
selv-.SetWindowicon (Qtgui.Qicon ("Rattle.PNG "))
selv-.initui ()
def initui (selv):
selv-.input_bar = qtwidgets.QlineEdit (selv)
selv-.input_bar.setgeometry (150, 250, 500, 40)
Application = Qapplication (SYS.argv)
Vinn = vindu ()
vinne.forestilling()
sys.Avslutt (søknad.exec ())

Trinn 3: Opprette knapper

La oss nå legge til noen knapper til det blanke lerretet. Så la oss skrive koden for knappen. For knappen bruker vi QtWidgets.QpushButton (). Som vanlig kan vi angi geometrien ved hjelp av SetGeometry () -metoden.

selv-.Button1 = qtwidgets.Qpushbutton ("show", selv)
selv-.knapp1.setgeometry (275, 350, 200, 50)

Angi ikonet ved hjelp av Seticon () -metoden.

selv-.knapp1.Seticon (Qtgui.Qicon ("Rattle.PNG "))

Angi stilen på teksten ved hjelp av SetStyleSheet () -metoden. Du kan endre blant annet farge, fontvekt og skriftstørrelse.

selv-.knapp1.setStylesheet ("Farge: svart")
selv-.knapp1.setStylesheet ("Font-Weight: Bold")
selv-.knapp1.setStylesheet ("Font-size: 18Pt")

For å få knappen for å gjøre noe når den klikkes, må du fortelle knappen at den trenger å aktivere en funksjon når den klikkes. Dette gjøres ved hjelp av klikket.Connect (), der funksjonen som er aktivert sendes som et argument. I mitt tilfelle er det:

selv-.knapp1.klikket.Koble til (selv.knapp_klikket)

Deretter definerer vi funksjonen som skal kalles eller aktiveres når knappen trykkes på. Foreløpig vil vi bare skrive den ut på konsollen.

DEF Button_clicked (selv):
url_value = selv.input_bar.tekst()
print (url_value)

Koden som helhet nå vil se slik ut:

Fra PYQT5 importer qtwidgets
Fra PYQT5.QtWidgets importerer qapplication, qMainWindow
Importer Sys
Fra PYQT5 import qtgui
Klassevindu (QTWidgets.Qwidget):
def __init __ (selv):
super().__i det__()
selv-.SetGeometry (350, 100, 800, 600)
selv-.setWindowTitle ("Pyqt5")
selv-.SetWindowicon (Qtgui.Qicon ("Rattle.PNG "))
selv-.initui ()
def initui (selv):
selv-.input_bar = qtwidgets.QlineEdit (selv)
selv-.input_bar.setgeometry (150, 250, 500, 40)
selv-.Button1 = qtwidgets.Qpushbutton ("show", selv)
selv-.knapp1.setgeometry (275, 350, 200, 50)
selv-.knapp1.Seticon (Qtgui.Qicon ("Rattle.PNG "))
selv-.knapp1.setStylesheet ("Farge: svart")
selv-.knapp1.setStylesheet ("Font-Weight: Bold")
selv-.knapp1.setStylesheet ("Font-size: 18Pt")
selv-.knapp1.klikket.Koble til (selv.knapp_klikket)
DEF Button_clicked (selv):
url_value = selv.input_bar.tekst()
print (url_value)
Application = Qapplication (SYS.argv)
Vinn = vindu ()
vinne.forestilling()
sys.Avslutt (søknad.exec ())

Trinn 4: Opprette etiketter

La oss nå endre knappen Trykk på Kommandoen ved hjelp av Qlabels. Qlabels brukes til å legge til tekst. Vi legger til dette til def initui (selv).

selv-.Etikett = QTWidgets.Qlabel (selv)

Vi setter teksten på etiketten ved hjelp av SettExt () -metoden.

selv-.merkelapp.setText ("Endre denne tittelen ved å klikke på knappen")
selv-.merkelapp.SetGeometry (Qtcore.QRECT (200, 80, 500, 100))

Vi setter skriften, størrelsen og vekten ved hjelp av setStyleheet ().Vi setter skriften, størrelsen og vekten ved hjelp av setStyleheet ().

selv-.merkelapp.setStylesheet ("Font-Weight: Bold")
selv-.merkelapp.setStylesheet ("Font-size: 18Pt")

Og til slutt oppdaterer vi alt ved hjelp av Update () -metoden.

selv-.merkelapp.Oppdater()

Dette skaper følgende:

Nå kan vi endre innholdet i Button_clicked () -funksjonen.

DEF Button_clicked (selv):

Vi kan hente det brukeren skriver i tekstlinjen ved hjelp av teksten () -metoden.

url_value = selv.input_bar.tekst()

Vi kan deretter endre etiketten ved knappeklikking ved hjelp av SettExt () -metoden og plassere dem på riktig sted ved hjelp av SetGeometry () -metoden.

selv-.merkelapp.setText (url_value)
selv-.merkelapp.SetGeometry (Qtcore.QRECT (200, 80, 500, 100))

Koden som helhet nå vil se slik ut:

Fra PYQT5 importer qtwidgets
Fra PYQT5.QtWidgets importerer qapplication, qMainWindow
Importer Sys
Fra PYQT5 import qtgui, qtcore
Klassevindu (QTWidgets.Qwidget):
def __init __ (selv):
super().__i det__()
selv-.SetGeometry (350, 100, 800, 600)
selv-.setWindowTitle ("Pyqt5")
selv-.SetWindowicon (Qtgui.Qicon ("Rattle.PNG "))
selv-.initui ()
def initui (selv):
selv-.input_bar = qtwidgets.QlineEdit (selv)
selv-.input_bar.setgeometry (150, 250, 500, 40)
selv-.Button1 = qtwidgets.Qpushbutton ("show", selv)
selv-.knapp1.setgeometry (275, 350, 200, 50)
selv-.knapp1.Seticon (Qtgui.Qicon ("Rattle.PNG "))
selv-.knapp1.setStylesheet ("Farge: svart")
selv-.knapp1.setStylesheet ("Font-Weight: Bold")
selv-.knapp1.setStylesheet ("Font-size: 18Pt")
selv-.knapp1.klikket.Koble til (selv.knapp_klikket)
selv-.Etikett = QTWidgets.Qlabel (selv)
selv-.merkelapp.setText ("Endre denne tittelen ved å klikke på knappen")
selv-.merkelapp.SetGeometry (Qtcore.QRECT (200, 80, 500, 100))
selv-.merkelapp.setStylesheet ("Font-Weight: Bold")
selv-.merkelapp.setStylesheet ("Font-size: 18Pt")
selv-.merkelapp.Oppdater()
DEF Button_clicked (selv):
url_value = selv.input_bar.tekst()
selv-.merkelapp.setText (url_value)
selv-.merkelapp.SetGeometry (Qtcore.QRECT (200, 80, 500, 100))
Application = Qapplication (SYS.argv)
Vinn = vindu ()
vinne.forestilling()
sys.Avslutt (søknad.exec ())

Trinn 5: QVBoxLayout og QhBoxLayout

Jeg vil neit legg til en qvboxlayout eller qhboxlayout her, men du kan hvis du vil. QHBoxLayout vil ordne alt i et horisontalt mønster, og QVboxLayout vil ordne det vertikalt. Hvis du bruker QhBoxLayout eller QVBoxLayout, må du utelate metoden SetGeometry ().

Hvis du ville legge til det, ville du skrevet følgende i def initui (selv). Du initialiserer først oppsettet ved hjelp av QVBoxLayout ():

selv-.Design = QVboxLayout ()

Du legger deretter til widgets du vil ha i den ved hjelp av AddWidget () -metoden.

selv-.design.AddWidget (selv.merkelapp)
selv-.design.AddWidget (selv.input_bar)
selv-.design.AddWidget (selv.knapp1)

Du setter oppsettet ved hjelp av setLayout (), som tar den initialiserte variabelen som et argument.

selv-.setslayout (selv.design)

Jeg trenger det ikke her fordi jeg setter alt med setGeometry (), så jeg vil utelate dette i koden min. Imidlertid, hvis du vil ha den i koden din, vil hele koden se slik ut:

Fra PYQT5 importer qtwidgets
Fra PYQT5.QtWidgets Importer qapplication, qMainWindow, QhboxLayout, QVboxLayout
Importer Sys
Fra PYQT5 import qtgui, qtcore
Klassevindu (QTWidgets.Qwidget):
def __init __ (selv):
super().__i det__()
#selv.SetGeometry (350, 100, 800, 600)
selv-.setWindowTitle ("Pyqt5")
selv-.SetWindowicon (Qtgui.Qicon ("Rattle.PNG "))
selv-.initui ()
def initui (selv):
selv-.input_bar = qtwidgets.QlineEdit (selv)
#selv.input_bar.setgeometry (150, 250, 500, 40)
selv-.Button1 = qtwidgets.Qpushbutton ("show", selv)
#selv.knapp1.setgeometry (275, 350, 200, 50)
selv-.knapp1.Seticon (Qtgui.Qicon ("Rattle.PNG "))
selv-.knapp1.setStylesheet ("Farge: svart")
selv-.knapp1.setStylesheet ("Font-Weight: Bold")
selv-.knapp1.setStylesheet ("Font-size: 18Pt")
selv-.knapp1.klikket.Koble til (selv.knapp_klikket)
selv-.Etikett = QTWidgets.Qlabel (selv)
selv-.merkelapp.setText ("Endre denne tittelen ved å klikke på knappen")
#selv.merkelapp.SetGeometry (Qtcore.QRECT (200, 80, 500, 100))
selv-.merkelapp.setStylesheet ("Font-Weight: Bold")
selv-.merkelapp.setStylesheet ("Font-size: 18Pt")
selv-.merkelapp.Oppdater()
selv-.Design = QVboxLayout ()
selv-.design.AddWidget (selv.merkelapp)
selv-.design.AddWidget (selv.input_bar)
selv-.design.AddWidget (selv.knapp1)
selv-.setslayout (selv.design)
DEF Button_clicked (selv):
url_value = selv.input_bar.tekst()
selv-.merkelapp.setText (url_value)
selv-.merkelapp.SetGeometry (Qtcore.QRECT (200, 80, 500, 100))
Application = Qapplication (SYS.argv)
Vinn = vindu ()
vinne.forestilling()
sys.Avslutt (søknad.exec ())

Trinn 6: QT Designer

Det som er enda bedre med pyqt5 er at det kommer med sin egen designer. En designer er en konsoll der du kan designe GUI du ønsker, og programmet vil chuck ut Python -koden for den. QT Designer kommer i PYQT5-Tools-pakken, og slik at det må installeres for at den skal fungere. På QT -designeren kan du plassere knapper, glidebrytere osv.... Når du har plassert dem, kan du lagre filen som en .UI -fil.

Når filen er lagret som en .UI -fil, du må fortsatt konvertere den til en .py -fil slik at pycharm kan vise den. For å gjøre det, åpner du en terminal eller en CMD, og ​​type:

pyuic5 -x lagret_file_name.ui -o python_file.py

Jeg lagret filen min som lagret_file_name.ui. Terminalen vil chuck ut en python -fil og kalle den det du spurte. Du kan deretter åpne .py fil i pycharm og legg til logikken i den.

Husk at selv om vi kan bruke designeren til å designe utformingen av GUI, må vi fortsatt legge til logikk til koden, som gjøres utelukkende via Python -kode og ikke designeren. Dessverre legger ikke QT -designeren til logikk til koden!

I denne opplæringen lærte vi om det grunnleggende om PYQT5 og hvordan du bruker QT -designeren. Vi lærte at vi kunne lage blanke skjermer, legge til knapper ved hjelp av qpushbutton, legge til inngangsstenger ved hjelp av qlineEdit, legge til tekst ved hjelp av qlabels og ordne alt ved hjelp av qvboxlayout/qhboxlayout. Faktisk er PYQT5 en veldig stor modul som brukes til å lage en rekke GUI -stasjonære applikasjoner. Selv om det er mange moduler for GUI -applikasjoner i Python, velger de fleste PYQT5 fordi det tilbyr et stort utvalg av design og en designer for å lette oppgaver. Faktisk er PYQT5 en modul som er verdt å lære!

Glad koding!