QAction, QMenu a QMenuBar
QMenuBar je horizontální menu, které je v dnešní době již v každé aplikaci. QMenuBar je složen z jednotlivých rolovacích menu, které jsou tvořeny pomocí QMenu. Každé rolovací menu QMenu obsahuje akce (položky v menu), které jsou vytvořeny pomocí QAction. Nejčastěji se QMenuBar používá v hlavním okně QMainWindow, kde tvoří hlavní menu aplikace.
QAction ( text, parent )
QAction ( icon, text, parent )
Touto funkcí vytvoříme QAction ( v našem případě novou položku v menu) s rodičem parent a titulkem text. Pokud QAction používáme jako položku v menu, je rodič vždy menu, ve kterém chceme položku zobrazit. Pokud chceme přiřadit akci ikonku, můžeme ji definovat jako QIcon a předat funkci jako parametr icon.
QAction.setText( text )
Tato funkce nastavuje titulek QAction.
QAction.setData ( data )
Funkcí setData nastavujeme, stejně jako v minulých dílech, data typická pro konkrétní položku v menu. Data jsou ve formátu QVariant.
QAction.data ( )
Tato funkce vrátí data, která byla přiřazena položce ve formátu QVariant.
QAction.setCheckable ( bool )
Pokud je hodnota proměnné bool True, dá se QAction zaškrtnout (podobně jako zaškrtávací pole z minulého dílu).
QAction.triggered ( bool ) – signál
Signál triggered ( bool ) je generován, pokud uživatel aktivuje QAction (položku v menu). Hodnota bool je typu boolean a udává stav, který QAction má, pokud je nastavena jako zaškrtávací.
QMenu ( parent )
QMenu ( title, parent )
Oběma funkcemi můžeme vytvořit nové QMenu s rodičem parent. Pokud chceme přiřadit menu hned titulek, použijeme druhou funkci.
QMenu.setTitle ( title )
Touto funkcí nastavíme titulek QMenu.
QMenu.addAction ( qaction )
Tato funkce přidá novou akci (položku) do QMenu. Položka je typu QAction.
QMenu.addAction ( text )
QMenu.addAction ( icon, text )
Tyto funkce vznikly pro usnadnění práce programátorům. Místo vytváření nových akcí a následném přidávání akcí do QMenu můžeme zavolat jednu z těchto funkcí, která vytvoří QAction a automaticky ji přidá do QMenu. Vytvořená QAction je touto funkcí vrácena.
Místo kódu
menu=QtGui.QMenu("Soubor",menubar)
actionSave=QtGui.QAction("Save",menu)
menu.addAction(actionSave)
pak můžeme použít:
menu=QtGui.QMenu("Soubor",menubar)
actionSave=menu.addAction("Save")
QMenu.addMenu ( qmenu )
Pomocí této funkce přidáme do QMenu nové menu.
QMenu.addSeparator ( )
Touto funkcí přidáme do menu oddělovač.
QMenu.triggered ( QAction * ) – signál
Signál triggered ( QAction * ) je generován, pokud uživatel aktivuje položku v menu. Funkci, na kterou je signál napojen, je předána aktivována položka QAction.
QMenu.triggered ( QAction * ) – signál
Signál triggered ( QAction * ) je generován, pokud uživatel aktivuje položku v menu. Funkci, na kterou je signál napojen, je předána aktivována položka QAction.
QMenuBar ( parent )
Funkce vytvoří prázdný QMenuBar s rodičem parent.
QMenuBar.addMenu ( qmenu )
Touto funkcí přidáme do QMenubaru menu definované proměnnou qmenu.
QMainWindow.setMenuBar( menubar )
Tato funkce přidá menubar do hlavního okna aplikace.
QMenuBar – Praxe

Prohlížeč souborů z jednoho z minulých dílu obohatíme o ovládaní pomocí menu. Tento příklad by měl osvětlit použití jednoduchého menu v programech.
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from PyQt4 import QtCore, QtGui
import sys
def showFile():
""" Otevreni souboru a vlozeni jeho obsahu do QTextEditu """
f=open(str(fileNameLineEdit.text()))
text=f.read()
# Obsah souboru vlozime do widgetu mainTextEdit
mainTextEdit.setPlainText(text)
f.close()
def saveFile():
""" Ulozi soubor """
f=open(str(fileNameLineEdit.text()),"w")
text=str(mainTextEdit.toPlainText())
f.write(text)
f.close()
app = QtGui.QApplication(sys.argv)
mainWindow = QtGui.QMainWindow()
mainWindow.setWindowTitle("QMenu")
mainWidget=QtGui.QWidget(mainWindow)
mainWindow.setCentralWidget(mainWidget)
layout=QtGui.QGridLayout(mainWidget)
# Vytvorime menubar
menubar=QtGui.QMenuBar(mainWindow)
# Vytvorime jedine menu
menu=QtGui.QMenu("Soubor",menubar)
# Vytvorime akce naseho menu
actionSave=QtGui.QAction("Save",menu)
actionOpen=QtGui.QAction("Open",menu)
actionExit=QtGui.QAction("Exit",menu)
# Vlozime akce a jeden separator do menu
menu.addAction(actionSave)
menu.addAction(actionOpen)
menu.insertSeparator(actionExit)
menu.addAction(actionExit)
# Pridame menu do menubaru
menubar.addMenu(menu)
# Nastavime hlavnimu oknu QMenubar menubar
mainWindow.setMenuBar(menubar)
fileNameLabel=QtGui.QLabel("Soubor:",mainWidget)
fileNameLineEdit=QtGui.QLineEdit(mainWidget)
# Vytvorime QTextEdit mainTextEdit
mainTextEdit=QtGui.QTextEdit(mainWidget)
# Pridame objekty do layoutu
layout.addWidget(fileNameLabel,0,0)
layout.addWidget(fileNameLineEdit,0,1)
layout.addWidget(mainTextEdit,1,0,1,2)
# Napojime signaly akci na sloty aplikace
app.connect(actionExit,QtCore.SIGNAL("triggered ( bool )"),mainWindow.close)
app.connect(actionSave,QtCore.SIGNAL("triggered ( bool )"),saveFile)
app.connect(actionOpen,QtCore.SIGNAL("triggered ( bool )"),showFile)
mainWindow.show()
sys.exit(app.exec_())
QStatusBar
QStatusBar slouží k zobrazování informací o běhu programu ve spodní části okna.
QStatusBar ( parent )
Funkce zobrazí prázdný QStatusBar
QStatusBar.showMessage ( message, timeout)
Funkce showMessage zobrazí v QStatusBaru zprávu message. Parametr timeout udává čas v milisekundách, po který bude zpráva zobrazena. Pokud je hodnota proměnné timeout 0, je zpráva zobrazena trvale.
QStatusBar.clearMessage ( )
Touto funkcí smažeme text zobrazený v QStatusBaru.
QMainWindow.setStatusBar ( statusBar )
Tato funkce přidá statusBar do hlavního okna aplikace.
QToolBar
QToolBar funguje podobně jako QMenu s tím rozdílem, že jsou jeho položky zobrazeny vedle jednoho z okrajů okna. Stejně jako QMenu se i QToolBar skládá z položek tvořených pomocí QAction.
QToolBar.addAction ( qaction )
Touto funkcí přidáme novou položku typu QAction do QToolBaru.
QToolBar.addAction ( text )
QToolBar.addAction ( icon, text )
Podobně jako u QMenu vytváří tyto funkce novou položku QAction, kterou automaticky vloží do QToolBaru. Nová položka typu QAction je toutou funkcí navrácena.
QToolBar.addSeparator ( )
Touto funkcí přidáme do QToolBaru nový oddělovač.
QMainWindow.addToolBar ( qtoolbar )
Tato funkce přidá nový toolbar do hlavního okna aplikace.
QStatusBar a QToolBar – Praxe

Do minulého příkladu vložíme toolBar, který bude obsahovat stejné položky jako menu a statusBar, který bude vypisovat zprávu o uložení a otevření souboru.
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from PyQt4 import QtCore, QtGui
import sys
def showFile():
""" Otevreni souboru a vlozeni jeho obsahu do QTextEditu """
f=open(str(fileNameLineEdit.text()))
text=f.read()
# Obsah souboru vlozime do widgetu mainTextEdit
mainTextEdit.setPlainText(text)
f.close()
# zobrazeni zpravy se statusBaru po dobu 2 sekund
statusBar.showMessage("File opened",2000)
def saveFile():
""" Ulozi soubor """
f=open(str(fileNameLineEdit.text()),"w")
text=str(mainTextEdit.toPlainText())
f.write(text)
f.close()
# zobrazeni zpravy se statusBaru po dobu 2 sekund
statusBar.showMessage("File saved",2000)
app = QtGui.QApplication(sys.argv)
mainWindow = QtGui.QMainWindow()
mainWindow.setWindowTitle("QStatusBar")
mainWidget=QtGui.QWidget(mainWindow)
mainWindow.setCentralWidget(mainWidget)
layout=QtGui.QGridLayout(mainWidget)
# Vytvorime menu
menubar=QtGui.QMenuBar(mainWindow)
menu=QtGui.QMenu("Soubor",menubar)
actionSave=QtGui.QAction("Save",menu)
actionOpen=QtGui.QAction("Open",menu)
actionExit=QtGui.QAction("Exit",menu)
menu.addAction(actionSave)
menu.addAction(actionOpen)
menu.addSeparator()
menu.addAction(actionExit)
menubar.addMenu(menu)
mainWindow.setMenuBar(menubar)
# Vytvorime QStatusBar
statusBar=QtGui.QStatusBar (mainWindow)
statusBar.showMessage("Ready")
mainWindow.setStatusBar(statusBar)
# Vytvorime QToolBar
toolBar=QtGui.QToolBar("Soubor",mainWindow)
toolBar.addAction(actionSave)
toolBar.addAction(actionOpen)
toolBar.addSeparator()
toolBar.addAction(actionExit)
mainWindow.addToolBar(toolBar)
fileNameLabel=QtGui.QLabel("Soubor:",mainWidget)
fileNameLineEdit=QtGui.QLineEdit(mainWidget)
# Vytvorime QTextEdit mainTextEdit
mainTextEdit=QtGui.QTextEdit(mainWidget)
# Pridame objekty do layoutu
layout.addWidget(fileNameLabel,0,0)
layout.addWidget(fileNameLineEdit,0,1)
layout.addWidget(mainTextEdit,1,0,1,2)
# Napojime signaly akci na sloty aplikace
app.connect(actionExit,QtCore.SIGNAL("triggered ( bool )"),mainWindow.close)
app.connect(actionSave,QtCore.SIGNAL("triggered ( bool )"),saveFile)
app.connect(actionOpen,QtCore.SIGNAL("triggered ( bool )"),showFile)
mainWindow.show()
sys.exit(app.exec_())
Závěr
V dalším díle si povíme o tvorbě tabulek pomocí QTableWidget a o tvorbě záložek pomocí widgetu QTabWidget.