Hlavní navigace

PyQt4 - Úvod a první okno

Jan Kaluža

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?