PyQt5-opetusohjelma esimerkkeineen: Suunnittele GUI PyQt-sovelluksella Python
Mikรค on PyQt?
PyQt on avoimen lรคhdekoodin widget-toolkit Qt:n python-sidos, joka toimii myรถs monialustaisena sovelluskehityskehyksenรค. Qt on suosittu C++ puitteet GUI-sovellusten kirjoittamiseen kaikille tรคrkeimmille tyรถpรถytรค-, mobiili- ja sulautetuille alustoille (tukee Linuxia, Windows, Mac kรคyttรถjรคrjestelmรค, Android, iOS, Raspberry Pi ja muut).
PyQt on ilmainen ohjelmisto, jonka on kehittรคnyt ja yllรคpitรครค englantilainen Riverbank Computing, kun taas Qt on suomalainen The Qt Company -yritys.
PyQT:n ominaisuudet
Tรคssรค on PyQtin tรคrkeitรค ominaisuuksia:
Opi PyQt, joka koostuu yli kuudestasadasta luokasta, jotka kattavat joukon ominaisuuksia, kuten
- Graafiset kรคyttรถliittymรคt
- SQL-tietokannat
- Verkkotyรถkalut
- XML-kรคsittely
- Networking
Nรคitรค ominaisuuksia voidaan yhdistรครค kehittyneisiin kรคyttรถliittymiin sekรค itsenรคisiin sovelluksiin. Monet suuret yritykset kaikilla toimialoilla kรคyttรคvรคt Qt:tรค. Joitakin esimerkkejรค ovat LG, Mercedes, AMD, Panasonic, Harman jne.
PyQt-versiot
PyQt on saatavilla kahdessa versiossa, PyQt4 ja PyQt5. PyQt4 tarjoaa liimakoodin Qt-kehyksen 4.x- ja 5.x-versioiden sitomiseen, kun taas PyQt5 tarjoaa sitomisen vain 5.x-versioille. Tรคmรคn seurauksena PyQt5 ei ole taaksepรคin yhteensopiva vanhemman version vanhentuneiden moduulien kanssa. Tรคssรค Qt GUI -opetusohjelmassa PyQt5:tรค kรคytetรครคn esimerkkien esittelyyn. Nรคitรค kahta versiota lukuun ottamatta
Riverbank Computing tarjoaa myรถs PyQt3D:n โ Qt3D-kehyksen python-sidoksia. Qt3D on sovelluskehys, jota kรคytetรครคn luomaan reaaliaikaisia โโsimulaatiojรคrjestelmiรค 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 koodi konepellin alle. Tรคmรคn seurauksena sen rakentaminen ja asentaminen lรคhteestรค on monimutkainen prosessi verrattuna muihin python-kirjastoihin. PyQt5:n voi kuitenkin asentaa helposti 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 Python, sinun on ladattava ja asennettava pip ennen kuin jatkat. Ohjeita siihen voi etsiรค tรคstรค linkistรค: https://pypi.org/project/pip/.
PyQt5:n asentaminen
Vaihe 1) Avaa komentokehote.
Avaa komentokehote tai PowerShell Windows kone.
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.
Vaihtoehtoisesti voit myรถs ladata a Windows binaari tietokoneellesi asennetulle python-versiolle.
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 onnistuneesti asentanut PyQt5:n tietokoneellesi, olet valmis kirjoittamaan Python GUI-suunnittelusovellukset.
Aloitetaan yksinkertaisella sovelluksella tรคssรค PyQt5-opetusohjelmassa, joka nรคyttรครค tyhjรคn ikkunan nรคytรถllรคsi.
Sytytรค 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 kรคynnistรครคksesi ohjelman. Vaihtoehtoisesti voit kรคynnistรครค sovelluksen kaksoisnapsauttamalla tallennettua tiedostoa. Jos olet tehnyt kaiken oikein, uusi ikkuna avautuu otsikolla Guru99 alla olevan kuvan mukaisesti.
Loistava! Se toimii. Se ei ole paljon, mutta se riittรครค perusasioiden ymmรคrtรคmiseen. Katsotaan nyt tรคssรค PyQt-opetusohjelmassa 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 vรคlittรคnyt argumentteja QApplicationsille. Siksi voit myรถs korvata sen alla olevalla koodilla, eikรค sinun tarvitse edes tuoda sys-moduulia.
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รค kannattaa muistaa, ettรค widgetit voidaan upottaa yhteen, ulointa widgetiรค (eli widgetiรค, jolla ei ole ylรคpรครคtรค) kutsutaan ikkunaksi.
w.setWindowTitle("Guru99")
Metodin setWindowTitle() avulla voit vรคlittรครค merkkijonon argumenttina, joka asettaa ikkunan otsikon vรคlittรคmรคsi merkkijonoon. 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 rinnakkaisen suorituksen toteuttamiseen. app.exec_() siirtรครค ohjauksen Qt:lle, joka poistuu sovelluksesta vasta, kun kรคyttรคjรค sulkee sen graafisesta kรคyttรถliittymรคstรค. Tรคstรค syystรค ctrl+c ei poistu sovelluksesta kuten muissa python-ohjelmissa. Koska Qt hallitsee sovellusta, python-tapahtumia ei kรคsitellรค, ellemme mรครคritรค niitรค sovelluksen sisรคllรค. Huomaa myรถs, ettรค exec-menetelmรคn nimessรค on alaviiva; tรคmรค johtuu siitรค, ettรค exec() oli jo avainsana pythonissa ja alaviiva ratkaisee nimeรคmisristiriidan.
Tyhjien ikkunoiden takana
Edellisessรค osiossa nรคit kuinka tehdรค peruswidget Qt:ssรค. Nyt on aika tehdรค joitain osallistuvampia kรคyttรถliittymiรค, joiden kanssa kรคyttรคjรคt voivat todella olla vuorovaikutuksessa. Sytytรค uudelleen 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 mikรค tahansa haluamasi ja paina F5 kรคynnistรครคksesi ohjelman. Jos et ole tehnyt virheitรค, IDLE avaa uuden ikkunan, jossa on tekstiรค ja painike alla olevan kuvan mukaisesti.
- Kun napsautat ensimmรคisessรค ikkunassa olevaa painiketta, avautuu uusi viestilaatikko, jossa on kirjoittamasi teksti.
- Voit nyt napsauttaa Piilota tiedot/Nรคytรค tiedot -painiketta vaihtaaksesi lisรคtekstin nรคkyvyyttรค.
Kuten nรคet, koska emme olleet asettaneet viestikenttรครคn mitรครคn ikkunan otsikkoa, python itse tarjosi oletusotsikon.
Nyt kun se toimii, katsotaanpa lisรคkoodia, jonka olet lisรคnnyt edelliseen PyQt5-esimerkkiin.
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รครคosa, ja kuten edellisessรค esimerkissรค, aloitat luomalla QApplication-esiintymรค, jota seuraa yksinkertainen widget, eli QWidget-esiintymรค.
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รคmรค on esimerkki Qt:n signaaleista ja aikavรคleistรค. GUI-pohjaisissa sovelluksissa toiminnot suoritetaan kรคyttรคjรคn suorittamien toimien perusteella, kuten viemรคllรค hiiri elementin pรครคlle tai napsauttamalla painiketta. Nรคitรค toimia kutsutaan Tapahtumat. Muista, ettรค app.exec_()-menetelmรค siirtรครค ohjauksen Qt:lle tapahtuma-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-funktiot (kuten tรคssรค esimerkissรค dialogitoiminto), jotta toiminto suoritetaan, kun signaali laukaistaan. Nรคitรค toimintoja kutsutaan lรคhtรถ Qt lingolla.
Myรถhemmin perussyntaksi aikavรคlitoiminnon laukaisemiseksi vastauksena tapahtuman signaaliin on seuraava
widget.signal.connect(slot)
Mikรค tarkoittaa, ettรค aina kun a 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 korkeatasoinen nรคkemys PyQt5:n rakenteesta. Tรคssรค osiossa nรคet, kuinka PyQt5 on jรคrjestetty sisรคisesti, ja opit PyQt5:n tarjoamista eri moduuleista, kirjastoista ja API-luokista.
PyQt5-hakemistorakenne
Nรคmรค ovat kรคyttรคmiรค perusmoduuleja PythonQt-sidos, erityisesti PyQt5.
- Qt: Se 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..
- QtWidgetit: Sisรคltรครค suurimman osan Pyqt5:ssรค saatavilla olevista widgeteistรค.
- 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 valittavissa oleva painike, samanlainen kuin html:n valintanapit.
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รครค vaakasuuntaisen valikkopalkin ikkunan ylรคosassa. 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 jakamaan ikkunan sisรคltรถ useiksi sivuiksi, joita voidaan kรคyttรครค widgetin pรครคllรค olevien eri vรคlilehtien kautta. Se koostuu kahdesta osasta: vรคlilehtipalkista ja vรคlilehtisivusta.
- QScrollBar: Sitรค kรคytetรครคn luomaan vierityspalkkeja, joiden avulla kรคyttรคjรค voi vierittรครค ylรถs ja alas ikkunassa. Se koostuu liikkuvasta liukusรครคtimestรค, liukusรครคtimestรค ja kahdesta painikkeesta liukusรครคtimen vierittรคmiseksi 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.
- QDock: Dock-widget on ali-ikkuna, jossa on kaksi ominaisuutta:
- Sitรค voidaan siirtรครค pรครคikkunassa ja
- Se voidaan kiinnittรครค 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.
- QBoxLayout
- 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รครค.
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.
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:
AddWidget()-metodi ruudukkoasettelussa ottaa nรคmรค argumentit:
- Widget-objekti, jonka haluat lisรคtรค ruudukkoon
- Objektin x-koordinaatti
- Objektin y-koordinaatti
- Rivivรคli (oletus = 0)
- Col-span (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รครค:
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.
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 oletusarvosta Fusioniksi
app.setStyle("Fusion")
Tรคltรค edellinen esimerkki nรคyttรครค Fusion Themessa
Toinen hyรถdyllinen toiminto sovellusten teeman tekemiseen on setPalette()-menetelmรค. Tรคssรค on koodi eri widgetien vรคrien muuttamiseen setPalette()-toiminnolla.
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.
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รค toimii. Kun olet luonut QPalette-objektin, anna setColor()-menetelmรคllรค widgetin nimi, jonka vรคriรค haluat muuttaa, ja vรคri, jonka haluat asettaa.
qp.setColor(QPalette.Window, Qt.black)
Tรคmรค muuttaa ikkunan vรคrin mustaksi. Kun olet mรครคrittรคnyt vรคriteeman, kรคytรค setPalette()-funktiota paletin lisรครคmiseksi sovellukseesi.
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.
Yhteenveto
- PyQt on python-sidos tiedostolle C++ Kรคyttรถliittymรคkehys, Qt.
- PyQt4 ja PyQt5 ovat Riverbank Computingin kaksi tรคrkeintรค versiota.
- PyQt-kehyksen pรครคmoduulit ovat:
- Qt
- QtCore
- QtWidgetit
- QtGui
- QtSql
- QtNetwork
- PyQt tukee erilaisia โโwidgetejรค, kuten:
- painikkeet
- Tekstimerkit
- Tekstikentรคt
- Valintapainikkeet ja valintaruudut
- Tyรถkalurivit ja valikkopalkit
- Web-paketti
- Vรคlilehdet
- Satamalaituri
- PyQtissa interaktiivisuus toteutetaan kรคyttรคmรคllรค signaalit ja lรคhtรถ.
- An tapahtumaa varten on kรคyttรคjรคn graafisessa kรคyttรถliittymรคssรค suorittama toiminto (kuten painikkeen napsauttaminen).
- A signaali vastaava widget herรคttรครค sen, kun siinรค tapahtuu tapahtuma.
- A aukko on toiminto, joka on kytketty signaaliin ja suoritetaan, kun signaali nostetaan.
- PyQtissa on vankka asettelumoottori ja se tukee edistynyttรค asettelusuunnittelua ja -hallintaa. Nรคmรค ovat kaksi PyQtissa usein kรคytettyรค asettelumallia:
- Box Layout
- Ruudukon asettelu
- PyQt-suunnittelija antaa sinun luoda mukautettuja teemoja GUI-sovellukselle, ja siinรค on sisรครคnrakennettu tuki tyylisivuille.
- qtcreator Python voidaan kรคyttรครค sekรค kรคyttรถliittymien ettรค itsenรคisten sovellusten luomiseen.












