====== Třída představující okno s jedním tlačítkem ====== Vytvoříme třídu Window. import sys from PyQt5.QtWidgets import * class Window (QMainWindow) : def __init__ (self) : super().__init__() button = QPushButton (self) button.setText ("Knoflik") self.setCentralWidget (button) def main () : app = QApplication (sys.argv) win = Window () win.show () sys.exit (app.exec_()) if __name__ == "__main__" : main () V Linuxu použijeme nějaký editor, uložíme zdrojový text do soubory např. //pokus.py// a spustíme **python3 pokus.py**. \\ Ve Windows můžeme použít jednoduché prostředí IDLE nainstalované spolu s Pythonem, v menu //File/New File// a opět v menu //Run//. Program začíná importem modulu **sys**. \\ Později použijeme **sys.argv** jako pole řádkových parametrů zadaných uživatelem. \\ Následuje import všech symbolů (** * **) z modulu **PyQt5.QtWidgets**. \\ Modul jsme naninstalovali do // Python3.8/lib/site-packages/ // příkazem //pip3 install PyQt5//. Vytvoříme __třídu__ //Window// __odvozenou__ od třídy //QMainWindow//. \\ Třída obsahuje __metodu__ (v C++ __členskou funkci__, member function) _ _ init _ _. \\ Toto zvláštní jméno představuje konstruktor, tedy metody automaticky volanou při vzniku nové __instance__. Parameter **self** v metodách představuje odkaz na instanci, pro kterou byla metoda volána. \\ Tento parametr musíme v metodách uvádět. Je to obdoba **this** z jazyka C++. Zápis **self.jméno** musíme také používat při přístupu k metodám nebo __atributům__ (proměnným uvnitř třídy, v C++ __členská data__). \\ Skriptovací jazyk jinak nerozezná atribut či metodu od lokálních nebo globálních proměnných. V konstruktoru nejprve zavoláme konstruktor nadrřazené třídy, z které je naše třída odvozena. super().__init__() Potom vytvoříme novou instanci třídy QPushButton a odkaz (v C++ ukazatel) uložíme do lokální proměnné //button//. button = QPushButton (self) Konstruktoru nově vznikající instance předáme jako parametr odkaz na naše okno. \\ Pokud konstruktor parametry nemá musíme použít prázdné závorky **( )**. Potom tlačítku nastavíme nadpis voláním metody //setText//. \\ A oknu nastavíme tlačítko jako centrální prvek. button.setText ("Knoflik") self.setCentralWidget (button) Zadefinujeme novou globální funkci (proceduru) //main//. \\ Identifikátor //main// zde nemá žádný zarezervovaný význam, funkce se může jmenovat libovolně. \\ Funkce nemá žádné parametry, za definicí musí být dvojtečka, tělo funkce musí být //"identováno"// o několik mezer. def main () : app = QApplication (sys.argv) win = Window () win.show () sys.exit (app.exec_()) Funkce //main// vytvoří instanci třídy //QApplication// která udržuje seznam oken naší aplikace. \\ Potom vytvoříme novou instanci reprezentující naše okno. \\ Okno zobrazíme na obrazovce. Funkce **app.exec_()** nechá aplikaci běžet a čeká na stisky kláves a pohyby myši. \\ Až aplikace skončí tak je výsledkem metody //exec_// číslo, které sys.exec předá aplikaci, která náš program spustila. if __name__ == "__main__" : main () Na prvním sloupci zcela vlevo začínají importy, deklarace tříd, globálních funkcí a __hlavní program__. \\ Hlavní program otestuje, zda není spuštěn jen jako modul v jiném programu. \\ A pokud je samostatným programem, tak zavolá funkci //main//. ====== Reakce na stisknutí tlačítka ====== Ještě doplníme funkci volanou při stisknutí tlačítka. \\ Z lokální proměnné //button// uděláme atribut (**self.button**), tedy proměnnou uloženou v instanci naší třídy //Window//. \\ Budeme ji potřebovat v metodě //onClick//. Až bude tlačítko stisknuto, tak se má zavolat metoda //onClick// z naší třídy //Window//. self.button.clicked.connect (self.onClick) Zde je celý program. import sys from PyQt5.QtWidgets import * class Window (QMainWindow) : def __init__ (self) : super().__init__() self.button = QPushButton (self) self.button.setText ("Knoflik") self.button.clicked.connect (self.onClick) self.setCentralWidget (self.button) def onClick (self) : self.button.setText ("Click") def main () : app = QApplication (sys.argv) win = Window () win.show () sys.exit (app.exec_()) if __name__ == "__main__" : main () {{uop::button.png}}