Hlavní navigace

PyQt4 - Úvod a první okno

Jan Kaluža 8. 1. 2007

Tímto článkem začíná nový seriál, který se bude zabývat modulem pro Python umožňujícím vytvářet grafické aplikace s knihovnou QT4V. V dnešním úvodním dílu si řekneme, co vlastně PyQt4 je a proč je dobré jej používat. Naučíme se vytvořit jednoduchou aplikaci a přiřadit jí okno, do kterého umístíme tlačítko.

Co je PyQt4?

PyQt4 je modul pro Python, který umožňuje vytvářet grafické aplikace používající knihovnu QT4 firmy Trolltech. Aplikace napsané s použitím PyQt4 běží na všech operačních systémech, které jsou podporovány knihovnou QT4. V současné době jde o Windows, Mac OS X a Linux. Knihovna QT4 je na rozdíl od QT3 licencována pod GNU GPL i ve verzi pro Windows. Je tedy možné vytvářet GPL programy využívající QT4 i pro Windows, což s QT3 nebylo možné. Knihovna PyQt4 obsahuje také nástroje pro práci s síťovými sockety, vlákny, SQL databázemi, OpenGL nebo XML, ale o těchto vlastnostech v seriálu nebudeme mluvit. Články jsou určeny pro čtenáře, kteří umí programovat v jazyce Python. Pokud tento jazyk neovládáte, můžu vás odkázat na seriál Létající cirkus nebo oficiální Python tutoriál.

Vytváříme okno – Teorie

Než vytvoříme okno, je potřeba si říci něco o třídách a funkcích, které budeme používat. Nepovíme si o všech funkcích, které PyQt4 poskytuje, ale jen o těch, které pro nás mají v tuto chvíli význam. PyQt4 se skládá z mnoha menších modulů, které tématicky rozdělují jeho třídy a funkce. Proto musíme na začátku programu importovat všechny moduly PyQt4, které budeme potřebovat.

QApplication ( argv ) – modul QtGui

Funkce QApplication vytvoří nový objekt aplikace. Parametr argv je seznam argumentů předaných naší QT aplikaci z příkazové řádky. Může se jednat například o informaci, na kterém displeji se má aplikace spustit, apod. Objekt aplikace může být vytvořen v programu jen jednou.

QApplication.exec_( )

Funkce QApplication.exec_( ) spustí naši aplikaci.

QMainWindow ( parent=0 ) – modul QtGui

Funkce QMainWindow vytvoří nové okno. Parametr parent je objekt (widget) QT, který je rodičem našemu oknu. Pokud parametr nezadáme, je roven nule a tím pádem je naše okno hlavním oknem programu. Okno se vytvoří pouze v paměti a nezobrazí se, dokud nezavoláme jeho fuknci show() (viz níže).

QMainWindow.set­WindowTitle ( title )

QMainWindow.set­WindowTitle nastavuje titulek okna.

QMainWindow.show ( )

Funkce zobrazí okno. Funkci show() má kromě QMainWindow drtivá většina objektů (widgetů) v QT4.

Vytváříme okno – Praxe

PyQt1 1

Nyní již víme vše potřebné k vytvoření okna a můžeme si jeho vytvoření ukázat prakticky.

#!/usr/bin/env python

# importujeme moduly PyQt4, ktere budeme pouzivat
from PyQt4 import QtCore, QtGui

# importujeme modul sys kvuli sys.argv
import sys

# vytvorime objekt aplikace
app = QtGui.QApplication(sys.argv)

# vytvorime hlavni okno aplikace
MainWindow = QtGui.QMainWindow()

# dame hlavnimu oknu titulek
MainWindow.setWindowTitle("Titulek okna")

# zobrazime hlavni okno
MainWindow.show()

# spustime aplikaci
sys.exit(app.exec_())

Přidáváme tlačítko – Teorie

Tlačítka jsou jedním ze základních ovládacích prvků grafických programů. My se naučíme vytvořit jednoduché tlačítko a přidat jej do programu. Opět si budeme muset nejdříve povědět o některých funkcích, které budeme používat.

QPushButton ( parent ) – modul QtGui
QPushButton ( text, parent ) – modul QtGui

Funkce QPushButton vytvoří nové tlačítko. Paramter parent je rodič tlačítka (nadřazený widget). V našem případě je rodičem tlačítka hlavní okno, ve kterém bude tlačítko zobrazeno. Pokud chceme tlačítku rovnou přiřadit popisek, můžeme použít druhou syntaxi, kde proměnná text bude jeho popiskem.

QPushButton.setText ( text )

Tato funkce slouží k změně nebo nastavení popisku tlačítka.

Přidáváme tlačítko – Praxe

PyQt1 2

Do programu stačí přidat dva řádky, které jsme si popsali výše, a zobrazí se nám v okně tlačítko. Jistě vás napadne, proč okno musíme zobrazovat pomocí funkce show() a tlačítko touto funkcí zobrazit nemusíme. Je to tak proto, že zobrazením rodičovského objektu automaticky zobrazíme objekty dceřiné.

#!/usr/bin/env python
from PyQt4 import QtCore, QtGui
import sys

app = QtGui.QApplication(sys.argv)

MainWindow = QtGui.QMainWindow()
MainWindow.setWindowTitle("Titulek okna")

# Vytvorime tlacitko s rodicem MainWindow
PushButton = QtGui.QPushButton(MainWindow)

# Dame tlacitku popisek
PushButton.setText("Popisek tlacitka")

MainWindow.show()
sys.exit(app.exec_())

Samozřejmě bychom dva příkazy, kterými vytváříme tlačítko a dáváme mu popisek, mohli nahradit příkazem jedním. Ten by v tomto případě vypadal takto:

PushButton = QtGui.QPushButton("Popisek tlacitka",MainWindow)

Závěr

V dalším díle si řekneme něco o layoutech, které nám pomohou rozmísťovat objekty v okně. Tím pádem bude tlačítko měnit svou velikost podle změny velikosti okna. Také si řekneme o signálech a slotech, díky kterým můžeme po kliknutí na tlačítko například zavřít okno nebo zavolat naši vlastní funkci.

Našli jste v článku chybu?

31. 1. 2007 17:54

Chlup (neregistrovaný)
"Mám snad hlavu ve tvaru legrační kostky ledu ?"

12. 1. 2007 23:55

uživatel si přál zůstat v anonymitě
Asi máš pravdu, ja v oblasti vedy a výskumu nepracujem takže som zatiaľ s Pythonom do kontaktu neprišiel.
Podnikatel.cz: Víme první výsledky doby odezvy #EET

Víme první výsledky doby odezvy #EET

Vitalia.cz: Tesco: Chudá rodina si koupí levné polské kuře

Tesco: Chudá rodina si koupí levné polské kuře

Vitalia.cz: Znáte „černý detox“? Ani to nezkoušejte

Znáte „černý detox“? Ani to nezkoušejte

Root.cz: 250 Mbit/s po telefonní lince, když máte štěstí

250 Mbit/s po telefonní lince, když máte štěstí

Podnikatel.cz: Přehledná titulka, průvodci, responzivita

Přehledná titulka, průvodci, responzivita

Měšec.cz: Jak vymáhat výživné zadarmo?

Jak vymáhat výživné zadarmo?

Podnikatel.cz: Babiše přesvědčila 89letá podnikatelka?!

Babiše přesvědčila 89letá podnikatelka?!

Lupa.cz: UX přestává pro firmy být magie

UX přestává pro firmy být magie

Vitalia.cz: Chtějí si léčit kvasinky. Lék je jen v Německu

Chtějí si léčit kvasinky. Lék je jen v Německu

Vitalia.cz: Paštiky plné masa ho zatím neuživí

Paštiky plné masa ho zatím neuživí

Podnikatel.cz: Na poslední chvíli šokuje výjimkami v EET

Na poslední chvíli šokuje výjimkami v EET

Lupa.cz: Google měl výpadek, nejel Gmail ani YouTube

Google měl výpadek, nejel Gmail ani YouTube

Lupa.cz: Insolvenční řízení kvůli cookies? Vítejte v ČR

Insolvenční řízení kvůli cookies? Vítejte v ČR

Root.cz: Vypadl Google a rozbilo se toho hodně

Vypadl Google a rozbilo se toho hodně

Vitalia.cz: Manželka je bio, ale na sex moc není

Manželka je bio, ale na sex moc není

Root.cz: Certifikáty zadarmo jsou horší než za peníze?

Certifikáty zadarmo jsou horší než za peníze?

Podnikatel.cz: EET: Totálně nezvládli metodologii projektu

EET: Totálně nezvládli metodologii projektu

Vitalia.cz: To není kašel! Správná diagnóza zachrání život

To není kašel! Správná diagnóza zachrání život

DigiZone.cz: Rádio Šlágr má licenci pro digi vysílání

Rádio Šlágr má licenci pro digi vysílání

DigiZone.cz: Sony KD-55XD8005 s Android 6.0

Sony KD-55XD8005 s Android 6.0