PyQt-käyttöliittymäkirjasto PyQt-käyttöliittymäkirjasto • PyQt on laaja ja yleinen kirjasto – Tehokas grafiikka ja monipuoliset ominaisuudet – Toimii monilla eri alustoilla – PyQt5 pitää sisällään 620 luokkaa ja 6000 funktiota ja metodia • Muita vastaavia käyttöliittymäkirjastoja: – PySide, PyGTK, wxPython, Tkinter • Qt on käytettävissä monesta muustakin kielestä – PyQt on joukko sidontoja alla olevaan Qt-toteutukseen – PyQt on toteutettu joukkona Python moduuleita • Keskeinen käsite ovat käyttöliittymäkomponentit (widget) – Ne vastaavat usein suoraan ikkunaan ilmestyviä graafisia olioita 2 Esimerkki: proseduaalinen ohjelmointi • Proseduraalisessa ohjelmoinnissa luodaan aliohjelmia – Tyypillisesti muuttavat ohjelman tietorakenteiden tilaa • Oheinen luo ikkunan PyQt5:llä import sys from PyQt5.QtWidgets import QWidget, QPushButton, QApplication def Example(): app = QApplication(sys.argv) w = QWidget() b = QPushButton('Push', w) b.clicked.connect(w.close) w.show() sys.exit(app.exec_()) 3 Esimerkki: sama olio-ohjelmoinnilla • Olio-ohjelmoinnissa luomme luokan – Perustoiminnallisuus rakennetaan olioon, jota käytetään • Ohessa widget-olion kutsuminen yms. on jätetty pois class Example(QWidget): def __init__(self): super().__init__() self.initUI() def initUI(self): self.__btn = QPushButton('Push', self) self.show() self.activate_close() def activate_close(self): self.__btn.clicked.connect(self.close) self.show() 4 Havaintoja edellisten esimerkkien eroista • Proseduraaliversiossa voisimme antaa argumentteja – Näin aliohjelma olisi yleiskäyttöisempi – Toiminnallisuus on kuitenkin sidottu tuohon aliohjelmaan • Olio-ohjelmointiversiossa voisimme lisätä metodeja – Mutta oliomme osaa jo tosi monta asiaa • Kirjoittamalla help(Example) huomaa eron – Toiminnallisuus on sidottu olioon ja seuraa sen mukana 5 PyQt-pohjaiset sovellukset: QApplication • PyQt-pohjaisen sovelluksen varsinainen käyttöliittymä on QApplication – Yhdellä sovelluksella on vain yksi QApplication • Tyypillisesti alustetaan heti pääohjelman alussa – Käynnistetään sitten kun koko käyttöliittymä on alustettu • Se on kuuntelija-olio, joka pyörittää tapahtumasilmukkaa (event loop), jossa odotellaan tapahtumia – Jäädään odottamaan päättymistä • Ikkunoita, komponentteja ja säikeitä voi olla vaikka kuinka monta yhdessä QApplication-oliossa – Rinnakkaisuus on luonteva piirre reaktiivisille järjestelmille 6 Käyttöliittymäkomponentit (widget) • Keskeinen käsite ovat käyttöliittymäkomponentit (widget) – Jatkossa lyhyesti ”komponentti” – Ne vastaavat usein suoraan ikkunaan ilmestyviä graafisia olioita – Python ohjelman sisällä komponentit näkyvät olioina – Ominaisuuksien periminen kirjastosta on keskeistä • Ominaisuudet muodostavat hierarkian • Perimällä itse tehdyt komponentit osaavat perusasiat • Myös graafisesti komponentit muodostavat hierarkian – Ikkunassa komponentit voivat olla toisensa sisällä • Olioiden tyypit (luokat) rajoittavat tietenkin tätä – Ohjelman sisällä tämä näkyy olioiden välisinä viittauksina 7 Ikkunat • Tavallisesti käyttöliittymän komponentit ovat ikkunoissa – Ikkunat sinänsä ovat ympäröivän käyttöjärjestelmän ominaisuus – Qt ei suinkaan (oletusarvoisesti) hallitse koko näyttöä • Komponentin (ja sen alikomponenttien) sisältö näkyy ikkunassa – Yleensä alikomponentteja on monia • Ikkunan kehystys on ympäröivän järjestelmän asia – Eri ympäristöissä sama Qt-käyttöliittymä näyttää erilaiselta – Esimerkiksi valikkojen paikat • Monet oletusarvot ovat ympäristöriippuvaisia – Kirjaisimien koot, tyylit, värit, kursorin muoto, jne. 8 Komponenttityypit • Komponentteja on kirjastossa laaja valikoima – Usein haluttu löytyy suoraan kirjastosta – Itse voi tietysti tehdä lisää perimällä jonkun valmiin komponentin – Qt tukee vapaata piirtämistä ja jopa raakaa grafiikkaa • Usein käytettyjä ja yksinkertaisia ovat esimerkiksi – Painonapit (QPushButton) – Valikot (erityisesti menuBar) – Tekstikomponentit (Qlabel, QLineEdit) – Rastiruudut (QCheckBox) – Erilaiset kuvat (esim. QPixmap) • On myös monimutkaisia komponentteja – Esimerkiksi piirtopintoja (esim. QGraphicsScene) 9.
Details
-
File Typepdf
-
Upload Time-
-
Content LanguagesEnglish
-
Upload UserAnonymous/Not logged-in
-
File Pages9 Page
-
File Size-