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
![PyQt6 1](https://i.iinfo.cz/urs/6-1-117154554169197.png)
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
![PyQt6 2](https://i.iinfo.cz/urs/6-2-117154555450654.png)
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.