PyQt5-opetusohjelma esimerkkeineen: Luo Python Käyttöliittymät Qt:llä

⚡ Älykäs yhteenveto

PyQt on Python sidonta alustojenväliselle Qt-widget-työkalupakille, jonka avulla kehittäjät voivat rakentaa natiiveja työpöytäkäyttöliittymiä. Se kattaa yli kuusisataa C++ kursseja, jotka kattavat ikkunat, painikkeet, asettelut, signaalit, kolikkopelit ja teemat Windows, macOSja Linux.

  • 🔘 Mikä on PyQt: A Python sitova Qt:lle C++ Riverbank Computingin ylläpitämä kehys.
  • ☑️ versiot: PyQt4 sitoo Qt 4.x:n ja 5.x:n; PyQt5 kohdistuu vain Qt 5.x -sarjaan.
  • Asennus: pip-paketinhallinta asentaa PyQt5:n wheelistä yhdellä komennolla.
  • 🧪 Ensimmäinen sovellus: QApplication ja QWidget luovat ja näyttävät näytöllä perusikkunan.
  • 🛠️ Signalja kolikkopelit: Widget-tapahtumat herättävät signaaleja, jotka yhdistyvät Python korttipaikan toiminnot.
  • 🤖 Tekoälyvalmis: PyQt rakentaa työpöytäkäyttöliittymiä, jotka suorittavat ja visualisoivat koneoppimismalleja.

PyQt5 opetusohjelma

Alla olevat osiot vievät sinut PyQt:n perusteista asennukseen, ydinwidgetteihin, asetteluihin ja teemoihin ajettavien esimerkkien avulla.

Mikä on PyQt?

PyQt on Python avoimen lähdekoodin widget-työkalupakin Qt:n sitominen, joka toimii myös alustojen välisenä sovelluskehityskehyksenä. Qt on suosittu C++ kehys GUI-sovellusten kirjoittamiseen kaikille tärkeimmille työpöytä-, mobiili- ja sulautetuille alustoille (se tukee Linuxia, Windows, macOS, Android, iOS, Raspberry Pi ja muut).

PyQt on englantilaisen Riverbank Computing -yrityksen kehittämä ja ylläpitämä ilmainen ohjelmisto, kun taas Qt:n on kehittänyt suomalainen yritys nimeltä The Qt Company.

PyQt:n ominaisuudet

Tässä on PyQtin tärkeitä ominaisuuksia:

PyQt koostuu yli kuudestasadasta luokasta, jotka kattavat useita ominaisuuksia, kuten:

  • Graafiset käyttöliittymät
  • SQL-tietokannat
  • Verkkotyökalut
  • XML-käsittely
  • Networking

Näitä ominaisuuksia voidaan yhdistää luodakseen edistyneitä käyttöliittymiä sekä itsenäisiä sovelluksia. Monet suuret yritykset kaikilla toimialoilla käyttävät Qt:tä. Joitakin esimerkkejä ovat LG, Mercedes, AMD, Panasonic ja Harman.

PyQt-versiot

PyQt on saatavilla kahtena versiona, PyQt4 ja PyQt5. PyQt4 tarjoaa liimakoodia Qt-kehyksen 4.x- ja 5.x-versioiden sitomiseen, kun taas PyQt5 tarjoaa sidonnan vain 5.x-versioille. Tämän seurauksena PyQt5 ei ole taaksepäin yhteensopiva vanhemman version vanhentuneiden moduulien kanssa. Tässä PyQt-käyttöliittymän opetusohjelmassa esimerkkien demonstrointiin käytetään PyQt5:tä. Näiden kahden version lisäksi Riverbank Computing tarjoaa myös PyQt3D:n – Python Qt3D-kehyksen sidokset. Qt3D on sovelluskehys, jota käytetään reaaliaikaisten simulointijärjestelmien luomiseen 2D/3D-renderöinnillä.

PyQt5:n asentaminen

Tässä PyQt5-opetusohjelmassa näemme kaksi tapaa asentaa PyQt:

  • Pyörätiedostojen käyttö
  • Rakentaminen ja asennus lähteestä

Qt (lausutaan söpö) on monimutkainen järjestelmä, ja PyQt-koodikanta sisältää käännetty C++ ja Python koodia konepellin alla. Tämän seurauksena sen rakentaminen ja asentaminen lähdekoodista on monimutkaisempi prosessi kuin muihin Python kirjastoja. Voit kuitenkin helposti asentaa PyQt5:n pyörien avulla.

Asennus pyörillä

Pyörät ovat uusi standardi Python pakkaus ja jakelumuoto. Yksinkertaisesti sanottuna pyörä on ZIP-arkisto, jolla on erityinen nimi ja .whl tiedostopääte. Pyörät voidaan asentaa käyttämällä pip (Python's paketinhallinta), joka sisältyy oletuksena uusimpiin versioihin Python.

Joten jos sinulla on Python 3.4 tai uudempi asennettuna, sinulla on jo pip. Jos kuitenkin käytät vanhempaa versiota Pythonsinun on ladattava ja asennettava pip ennen kuin jatkat. Voit etsiä ohjeita tästä linkistä: https://pypi.org/project/pip/.

PyQt5:n asentaminen:

Vaihe 1) Avaa komentokehote.
Avaa komentokehote tai PowerShell Windows kone.

asenna PyQt5

Vaihe 2) Kirjoita seuraava.

 pip install PyQt5

Vaihe 3) Asennus onnistui.
Tämä PyQt5-opetusohjelman vaihe lataa PyQt5 whl -paketin (noin 50 Mt) ja asentaa sen järjestelmääsi.

asenna PyQt5

Vaihtoehtoisesti voit myös ladata a Windows binääritiedosto versiolle Python asennettu tietokoneeseen.

Kun se on valmis, siirry tämän PyQt5-opetusohjelman seuraavaan osaan kirjoittaaksesi ensimmäisen GUI-sovelluksesi.

Perus PyQt Concepts ja Ohjelmat

Nyt kun olet asentanut PyQt5:n onnistuneesti tietokoneellesi, olet valmis kirjoittamaan Python GUI-sovellukset

Aloitetaan tässä PyQt5-tutoriaalissa yksinkertaisella sovelluksella, joka näyttää tyhjän ikkunan näytölläsi.

Sytytä oma Python IDLE ja kirjoita seuraava:

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

Tallenna se nimellä app.py (nimellä ei ole väliä) ja paina F5-näppäintä suorittaaksesi ohjelman. Vaihtoehtoisesti voit kaksoisnapsauttaa tallennettua tiedostoa käynnistääksesi sovelluksen. Jos olet tehnyt kaiken oikein, uusi ikkuna avautuu otsikolla Guru99, kuten alla on esitetty.

Perus PyQt Concepts

Hienoa! Se toimii. Se ei ole paljon, mutta riittää perusasioiden ymmärtämiseen. Tässä PyQt-tutoriaalissa katsotaanpa yksityiskohtaisesti, mitä kukin ohjelmasi rivi tekee.

from PyQt5.QtWidgets import QApplication, QWidget

Tämä lauseke tuo kaikki moduulit, joita tarvitset graafisen käyttöliittymän luomiseen nykyiseen nimiavaruuteen. QtWidgets-moduuli sisältää kaikki tärkeimmät widgetit, joita käytät tässä Python Qt opetusohjelma.

app = QApplication(sys.argv)

Täällä olet luomassa QApplication-luokan objektia. Tämä vaihe on välttämätön PyQt5:lle; jokaisen käyttöliittymäsovelluksen on luotava QApplication-esiintymä eräänlaisena sisääntulopisteenä sovellukseen. Jos et luo sitä, näkyviin tulee virheitä.

sys.argv on luettelo komentoriviparametreista, jotka voit välittää sovellukselle, kun se käynnistetään komentotulkin kautta tai automatisoitaessa käyttöliittymää.

Tässä PyQt5-esimerkissä et antanut QApplicationille argumentteja. Siksi voit korvata sen alla olevalla koodilla ilman sys-moduulin tuontia.

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

Seuraavaksi teemme QWidget-luokan objektin. QWidget on kaikkien Qt:n käyttöliittymäobjektien perusluokka, ja käytännössä kaikki sovelluksessa näkemäsi on widgetejä. Se sisältää valintaikkunat, tekstit, painikkeet, palkit ja niin edelleen. Ominaisuus, jonka avulla voit suunnitella monimutkaisia ​​käyttöliittymiä, on se, että widgetit voivat olla sisäkkäisiä, eli widgetin sisällä voi olla widget, joka on toisen widgetin sisällä. Näet tämän toiminnassa seuraavassa osiossa.

w.resize(300,300)

QWidget-luokan koonmuutosmenetelmän avulla voit määrittää minkä tahansa widgetin mitat. Tässä tapauksessa olet muuttanut ikkunan kooksi 300 x 300 pikseliä.

Tässä tulee muistaa, että widgetit voidaan sijoittaa sisäkkäin; ulointa widgetiä (eli widgetiä, jolla ei ole pääelementtiä) kutsutaan ikkunaksi.

w.setWindowTitle("Guru99")

setWindowTitle()-metodin avulla voit antaa argumenttina merkkijonon, joka asettaa ikkunan otsikoksi annetun merkkijonon. PyQt5-esimerkissä otsikkorivillä näkyy Guru99.

w.show()

show() yksinkertaisesti näyttää widgetin näyttöruudulla.

sys.exit(app.exec_())

App.exec_() -menetelmä käynnistää Qt/C++ tapahtumasilmukka. Kuten tiedät, PyQt on suurelta osin kirjoitettu sisään C++ ja käyttää tapahtumasilmukkamekanismia rinnakkaissuorituksen toteuttamiseen. app.exec_() siirtää ohjauksen Qt:lle, joka sulkee sovelluksen vain, kun käyttäjä sulkee sen graafisesta käyttöliittymästä. Siksi ctrl+c ei sulje sovellusta kuten muissa Python ohjelmia. Koska Qt hallitsee sovellusta, Python tapahtumia ei käsitellä, ellemme määritä niitä sovelluksen sisällä. Huomaa myös, että exec-metodin nimessä on alaviiva; tämä johtuu siitä, että exec() oli jo avainsana Python ja alaviiva ratkaisee nimeämisristiriidan.

Tyhjien ikkunoiden takana

Edellisessä osiossa näit, miten Qt:ssä tehdään peruswidget. Nyt on aika tehdä monimutkaisempia käyttöliittymiä, joiden kanssa käyttäjät voivat olla todella vuorovaikutuksessa. Käynnistä jälleen... IDLE ja kirjoita seuraava.

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

Tallenna tiedosto nimellä appone.py tai millä tahansa muulla haluamallasi tavalla ja suorita ohjelma painamalla F5-näppäintä. Jos et ole tehnyt virheitä, IDLE avaa uuden ikkunan, jossa on tekstiä ja painike alla olevan kuvan mukaisesti.

Tyhjän yli Windows

  1. Kun napsautat ensimmäisessä ikkunassa olevaa painiketta, avautuu uusi viestilaatikko, jossa on kirjoittamasi teksti.
  2. Voit nyt napsauttaa Piilota tiedot/Näytä tiedot -painiketta vaihtaaksesi lisätekstin näkyvyyttä.

Kuten näette, koska emme olleet asettaneet ikkunan otsikkoa viestiruutuun, oletusotsikko annettiin seuraavasti: Python itse.

Nyt kun se toimii, katsotaanpa edelliseen PyQt5-esimerkkiin lisäämääsi ylimääräistä koodia.

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

Tämä tuo lisää widgetejä, joita olet käyttänyt PyQt5-esimerkeissä, nimittäin QLabel, QPushButton ja 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_()

Tässä olet määrittänyt menetelmän nimeltä dialogi, joka luo viestilaatikko-widgetin ja asettaa tekstiä painikkeisiin ja muihin kenttiin.

Dialogimenetelmää kutsutaan ohjelman päälohkosta, kun painiketta painetaan tietyssä widgetissä (tässä tapauksessa btn PushButton). Painikkeella laukaistu napsautustapahtuma saa tämän toiminnon suorittamaan. Tällaista funktiota kutsutaan Qt:n slotiksi, ja opit siitä lisää signaalit ja lähtö tulevissa kappaleissa.

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

Tämä on sovelluksen pääosio ja kuten edellisessä esimerkissä, aloitat luomalla QApplication-instanssin ja sen jälkeen yksinkertaisen widgetin, eli QWidget-instanssin.

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

Olet lisännyt tähän sovellukseen kaksi uutta widgetiä: QLabel ja QPushButton. QLabelia käytetään ei-muokattavan tekstin tai paikkamerkkien tulostamiseen widgetin sisään, kun taas QPushButtonia käytetään napsautettavan painikkeen luomiseen.

Tärkeintä tässä on huomata, että kun luot nimiön ja btn-objekteja, välität ikkunaobjektin (w) QLabelin ja QPushButtonin rakentajille. Näin sisäkkäisyys toimii PyQt5:ssä. Jos haluat luoda widgetin toisen widgetin sisällä, välität pääwidgetin viittauksen lapsen rakentajalle.

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

move() käytetään asettamaan widgetin sijainti sen yläwidgetiin nähden. Ensimmäisessä tapauksessa tunnistetta siirretään 100 kuvapistettä vasemmalta ja 130 kuvapistettä ikkunan yläosasta.

Vastaavasti painike sijoitetaan 110 pikselin etäisyydelle ikkunan vasemmalta ja 150 pikselin päähän ikkunan yläreunasta. Tämä esimerkki on karkea tapa saavuttaa asetteluja, eikä sitä yleensä käytetä tuotannossa. se sisältyy tähän vain oppimistarkoituksiin. Qt tukee erilaisia ​​asetteluja, jotka näet yksityiskohtaisesti tämän PyQt-opetusohjelman tulevissa osissa.

btn.clicked.connect(dialog)

Lopuksi tässä on esimerkki signaaleista ja sloteista Qt:ssä. Käyttöliittymäpohjaisissa sovelluksissa funktiot suoritetaan käyttäjän suorittamien toimintojen perusteella, kuten hiiren vieminen elementin päälle tai painikkeen napsauttaminen. Näitä toimintoja kutsutaan Tapahtumat. Muista, että app.exec_()-menetelmä siirtää ohjauksen Qt:lle tapahtumaa varten silmukka. Tapahtumasilmukka on tarkoitettu tätä varten: tapahtumien kuuntelemiseen ja toimien suorittamiseen vastauksena.

Aina kun tapahtuma tapahtuu, kuten käyttäjä napsauttaa painiketta, vastaava Qt-widget nostaa a signaali. Nämä signaalit voidaan liittää Python tehtävät (kuten tässä esimerkissä dialogitoiminto), jotta toiminto suoritetaan, kun signaali laukaistaan. Näitä toimintoja kutsutaan lähtö Qt lingolla.

Tämän jälkeen tapahtumasignaalin perusteella lähtötilanteen funktion laukaisemisen perussyntaksi on seuraava:

 widget.signal.connect(slot)

Tämä tarkoittaa, että aina kun signaali laukaisee a vekotin, kytketty aukko toiminto suoritetaan. Yhteenvetona voidaan todeta, että Qt käyttää signaaleja ja aikavälejä kommunikoidakseen objektien välillä ja helpottaakseen komponenttien uudelleenkäytettävyyttä ja vuorovaikutteisuutta.

Nyt kun osaat upottaa widgetejä ja toteuttaa vuorovaikutuksia signaalien ja slottien avulla, tässä on luettelo hyödyllisistä widgeteistä ja muista luokista, joita voit käyttää PyQt-sovelluksissasi.

Komponentit ja widgetit

PyQtissa on saatavilla suuri määrä widgetejä GUI-sovellusten luomiseen. PyQt5:n kanssa on kuitenkin tapahtunut luokat uudelleenjärjestelyä eri moduuleiksi ja lisenssien versiot.

Siksi on erittäin tärkeää saada yleiskuva PyQt5:n rakenteesta. Tässä osiossa näet, miten PyQt5 on järjestetty sisäisesti, ja opit PyQt5:n tarjoamista eri moduuleista, kirjastoista ja API-luokista.

PyQt5-hakemistorakenne

PyQt5-hakemistorakenne

Nämä ovat käyttämiä perusmoduuleja PythonQt-sidos, erityisesti PyQt5.

  • QtSe yhdistää kaikki alla mainitut luokat/moduulit yhdeksi moduuliksi. Se lisää huomattavasti sovelluksen käyttämää muistia. Kehystä on kuitenkin helpompi hallita tuomalla vain yksi moduuli.
  • QtCore: Sisältää muiden moduulien käyttämät ydinluokat, jotka eivät ole graafisia. Tässä on toteutettu Qt-tapahtumasilmukka, signaalit ja väliliitettävyys jne..
  • QtWidgetitSisältää useimmat PyQt5:ssä saatavilla olevat widgetit.
  • QtGui: Sisältää GUI-komponentteja ja laajentaa QtCore-moduulia.
  • QtNetwork: Sisältää luokkia, joita käytetään verkko-ohjelmoinnin toteuttamiseen Qt:n kautta. Se tukee TCP-palvelimia, TCP-pistokkeita, UDP-pistokkeita, SSL-käsittelyä, verkkoistuntoja ja DNS-hakuja.
  • QtMultimedia: tarjoaa matalan tason multimediatoimintoja.
  • QtSql: toteuttaa tietokantaintegroinnin SQL-tietokantoihin. Tukee ODBC:tä, MySQL, Oracle, SQLiteja PostgreSQL.

PyQt5-widgetit

Tässä on luettelo PyQt5:n yleisimmin käytetyistä widgeteistä:

  • QLineEdit: Tämä on syöttökenttä, johon käyttäjä voi syöttää yhden rivin tekstiä.
line = QLineEdit()
  • QRadioButton: Tämä on syöttökenttä, jossa on valittava painike, samanlainen kuin HTML:n radiopainikkeet.
rad = QRadioButton("button title")
rad.setChecked(True)  #to select the button by default.
  • QComboBox: Sitä käytetään näyttämään avattava valikko, jossa on luettelo valittavissa olevista kohteista.
drop = QComboBox(w)
drop.addItems(["item one", "item two", "item three"])
  • QCheckBox: Näyttää valittavissa olevan neliöruudun tarran edessä, joka on rastitettu, jos se on valittuna, kuten radiopainikkeita.
check = QCheckBox("button title")
  • QMenuBar: Se näyttää vaakasuoran valikkorivin ikkunan yläreunassa. Voit lisätä tähän palkkiin vain QMenu-luokan objekteja. Nämä QMenu-objektit voivat lisäksi sisältää merkkijonoja, QAction-objekteja tai muita QMenu-objekteja.
  • QToolBar: Se on vaakasuora palkki tai ruutu, jota voidaan siirtää ikkunan sisällä. Se voi sisältää painikkeita ja muita widgetejä.
  • QTab: Sitä käytetään ikkunan sisällön jakamiseen useille sivuille, joille pääsee käsiksi widgetin yläosassa olevien eri välilehtien kautta. Se koostuu kahdesta osasta: välilehtipalkista ja välilehtisivusta.
  • QScrollBar: Sitä käytetään vierityspalkkien luomiseen, joiden avulla käyttäjä voi vierittää ikkunassa ylös ja alas. Se koostuu liikuteltavasta liukusäätimestä, liukusäätimestä track ja kaksi painiketta liukusäätimen vierittämiseen ylös tai alas.
scroll = QScrollBar()
  • QSplitter: Jakajia käytetään erottamaan ikkunan sisältö, jotta widgetit ryhmitellään oikein eivätkä näytä sekavalta. QSplitter on yksi PyQt5:ssä saatavilla olevista ensisijaisista asettelukäsittelijöistä, ja sitä käytetään sisällön jakamiseen sekä vaaka- että pystysuunnassa.
  • QDockTelakointiwidget on ali-ikkuna, jolla on kaksi ominaisuutta: sitä voidaan siirtää pääikkunan sisällä ja se voidaan telakoida pääikkunan ulkopuolelle toiseen paikkaan näytöllä.

Asettelut ja teemat

Aiemmissa PyQt5-esimerkeissä olet käyttänyt vain menetelmiä move() ja resize() asettaaksesi widgetien sijainnit graafisessa käyttöliittymässäsi.

PyQtissa on kuitenkin vankka asettelunhallintamoottori, jonka avulla voidaan luoda edistyneitä käyttöliittymiä sovelluksille. Tässä osiossa opit kahdesta tärkeästä luokasta, joita käytetään Qt:ssä asettelujen luomiseen ja hallintaan.

  1. QBoxLayout
  2. QGridLayout

QBoxLayout

QBoxAsettelua käytetään asettelun alawidgetien kohdistamiseen vaaka- tai pystyriville. Kaksi kiinnostavaa luokkaa, jotka perivät Q:ltaBoxUlkoasu ovat:

  • QHBoxAsettelu: käytetään aliwidgetien linjaamiseen vaakasuunnassa.
  • QVBoxAsettelu: käytetään alatason widgetien linjaamiseen pystysuunnassa.

Esimerkiksi tällä tavalla kolme painiketta kohdistetaan QH:n kanssaBoxUlkoasu näyttää.

QBoxLayout

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

Ja tältä ne näyttävät QV:ssäBoxLayout.

QBoxLayout

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

Ainoa toiminto, joka tarvitsee selitystä tässä vaiheessa, on addWidget()-metodi. Sitä käytetään widgetien lisäämiseen HBox tai VBox layout. Sitä käytetään myös muissa asetteluissa, joissa se vaatii eri määrän parametreja, kuten näet seuraavassa osiossa. Widgetit näkyvät asettelun sisällä siinä järjestyksessä, jossa lisäät ne.

QGridLayout

QGridLayoutilla luodaan rajapintoja, joissa widgetit asetetaan ruudukon (kuten matriisin tai 2D-taulukon) muodossa. Jos haluat lisätä elementtejä ruudukkoasetteluun, voit käyttää matriisiesitystä määrittääksesi rivien ja sarakkeiden lukumäärän ruudukossa sekä näiden elementtien sijainnin.

Jos esimerkiksi haluat luoda 3*3-ruudukon (eli ruudukon, jossa on kolme riviä ja kolme saraketta), kirjoitat seuraavan koodin:

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

Tästä tulee tulos:

QGridLayout

Ruudukkoasettelun addWidget()-metodi ottaa vastaan ​​seuraavat argumentit:

  • Widget-objekti, jonka haluat lisätä ruudukkoon
  • Objektin x-koordinaatti
  • Objektin y-koordinaatti
  • Rivin pituus (oletus = 0)
  • Sarakkeen väli (oletus = 0)

Ymmärtääksesi sen paremmin, voit lisätä jokaisen widgetin manuaalisesti alla olevan kuvan mukaisesti.

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

Tältä ruudukko näyttää:

QGridLayout

Voit myös välittää riviväli- ja colspan-parametrit addWidget():lle, jotta voit kattaa useamman kuin yhden rivin tai sarakkeen.

Esimerkiksi

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

Tämä luo painikkeen, joka ulottuu molempien sarakkeiden yli.

QGridLayout

Teemat

PyQt5 sisältää joitain sisäänrakennettuja teemoja, joita voit käyttää sovelluksissasi. The setStyle() QApplication-esiintymässä kutsuttua menetelmää käytetään määrittämään tietty teema sovelluksellesi.

Esimerkiksi seuraavan koodirivin lisääminen muuttaa sovelluksesi teeman oletusarvoisesta Fusion-teemaksi.

app.setStyle("Fusion")

Näin edellinen esimerkki näyttää Fusion-teemassa.

Teemat

Toinen hyödyllinen funktio sovellusten teemojen muuttamiseen on setPalette()-metodi. Tässä on koodi eri widgetien värin muuttamiseen setPalette()-metodin avulla.

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

Tässä on tulos.

Teemat

Jotta voit käyttää setPalette()-menetelmää, sinun on ensin määritettävä paletti. Tämä tehdään luomalla QPalette-luokan objekti.

 qp = QPalette()

Huomaa, että QPalette-luokka kuuluu QtGui-moduuliin ja sinun on tuotava se, jotta tämä toimisi. Kun olet luonut QPalette-objektin, käytä setColor()-metodia välittääksesi widgetin nimen, jonka värin haluat muuttaa, ja värin, jonka haluat asettaa.

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

Tämä muuttaa ikkunan värin mustaksi. Kun olet määrittänyt värimaailmasi, käytä setPalette()-funktiota paletin käyttöönottamiseksi sovelluksessasi.

app.setPalette(qp)

Tämä on kaikki mitä sinun tarvitsee tehdä, jos haluat luoda perusteemoja sovelluksellesi. PyQt antaa sinun käyttää myös tyylisivuja määrittääksesi widgetien ulkoasun. Jos olet perehtynyt CSS:ään, voit helposti määrittää edistyneitä tyylejä sovelluksellesi Qt-tyylitaulukoiden avulla.

UKK

Tkinterin mukana toimitetaan Python ja sopii pienille, yksinkertaisille työkaluille. PyQt tarjoaa paljon enemmän widgettejä, visuaalisen suunnittelijan ja natiivin ulkoasun, mikä tekee siitä paremman suurille, ammattimaisille työpöytäsovelluksille – jyrkemmän oppimiskäyrän ja GPL-lisensoinnin hinnalla.

Molemmat sitovat samoja Qt-kirjastoja ja jakavat lähes identtiset API:t. Keskeinen ero on lisensointi: PyQt käyttää GPL-lisenssiä tai maksullista kaupallista lisenssiä, kun taas PySide (Qt for Python) käyttää LGPL-lisenssiä, mikä sallii suljetun lähdekoodin ohjelmistojen ilmaisen jakelun.

Qt Designer on vedä ja pudota -työkalu, joka tallentaa asettelusi XML .ui -tiedostona. Muunna se muotoon Python pyuic5-apuohjelmalla tai lataa se suorituksen aikana käyttämällä uic.loadUi().

PyQt6 sitoo uudemman Qt 6 -kehyksen ja vaatii täysin rajattuja luetteloita, kuten Qt.AlignmentFlag.AlignLeft. PyQt5 kohdistuu Qt 5:een ja on edelleen eniten käytetty versio. PyQt6:sta on myös poistettu joitakin vanhentuneita moduuleja ja lisätty parempi korkean DPI:n tuki.

Käytä PyInstalleria: suorita pyinstaller –onefile –windowed app.py yhdistääksesi skriptisi, PyQt5:n ja Qt-kirjastot yhdeksi suoritettavaksi tiedostoksi. –windowed-lippu piilottaa konsolin. fbs ja cx_Freeze ovat suosittuja vaihtoehtoja.

PyQt5 on aloittelijaystävällinen, jos osaat perusteet PythonLuokkien, olioiden ja signaalit ja paikat -kuvion ymmärtäminen auttaa eniten. Qt Designer antaa sinun rakentaa asetteluja visuaalisesti, joten voit luoda toimivia ikkunoita ennen kuin opit jokaisen widgetin manuaalisesti.

PyQt rakentaa koneoppimismalleille työpöytäkäyttöliittymiä – kojelaudat, jotka lataavat dataa, käynnistävät koulutuksen tai päättelyn ja näyttävät ennusteita, kaavioita tai kuvia. Se toimii hyvin yhdessä NumPyn, pandojen ja Matplotlibin kanssa, wrapping koulutettu malli käyttäjäystävällisessä käyttöliittymässä.

Kyllä. GitHub Copilot täydentää automaattisesti yleisiä PyQt5-malleja, kuten QApplication-sovelluksen asennuksen, widgetin luonnin ja signaali-paikkayhteydet kommentin tai funktion nimen perusteella. Suorita aina luotu ikkuna varmistaaksesi, että asettelut ja tapahtumankäsittelijät toimivat tarkoitetulla tavalla.

Tiivistä tämä viesti seuraavasti: