Tlačítka (objekty třídy Button
) jsou jedním z widgetů, které můžeme používat v grafickém rozhraní generovaného s použitím knihovny TKinter. Tlačítko je svázáno s nějakou akcí prostřednictvím parametru command
, jemuž předáme jméno podprogramu, který bude akci stisknutí tlačítka obsluhovat.
tlacitko = Button(hlavni_okno, text="AKCE", fg="blue", command=akce1)
Ta musí být definována před deklarací tlačítka v programu, nejjednodušší pro začátek bude, když bude bez parametrů.
def akce1(): print("Stisknuto tlačítko AKCE")
Konkrétní použití si opět ukážeme na programu, který bude přesouvat po plátně zelený trojúhelník:
Akce tlačítka
from tkinter import * from random import * # vytvoření hlavního okna aplikace hlavni_okno = Tk() # widget hlavního okna: Popisek hlavního okna a jeho umístění popisek = Label(hlavni_okno, text=u"GRAFIKA V PYTHONU") popisek.pack(side=TOP) # widget hlavního okna: plátno, na které je možné kreslit platno = Canvas(hlavni_okno, width=256, height=256) platno.pack() # objekty, které vkládáme na plátno x1 = 100 y1 = 100 troj1 = platno.create_polygon(x1, y1, x1-10, y1+10, x1+10, y1+10,fill="green", outline="black") # Akce tlačítek: něco se stane, když se stiskne tlačítko def kresli(): global platno, troj1 platno.delete(troj1) x1 = randint(10, 245) y1 = randint(10, 245) troj1 = platno.create_polygon(x1, y1, x1-10, y1+10, x1+10, y1+10,fill="green", outline="black") # tlačítka hlavního okna a jejich umístění tlacitko1 = Button(hlavni_okno, text="KONEC", fg="red", command=hlavni_okno.destroy) tlacitko1.pack(side=RIGHT) tlacitko2 = Button(hlavni_okno, text="PŘESUŇ!", fg="blue", command=kresli) tlacitko2.pack(side=LEFT) # spuštění hlavního okna aplikace hlavni_okno.mainloop()
Výstup programu pak bude vypadat následovně:
Program vykreslí zelený trojúhelník na zadaných počátečních souřadnicích.
Při stisku tlačítka Přesuň! podprogram kresli()
:
- dosavadní trojúhelník z plátna smaže
- vygeneruje nové souřadnice s pomocí knihovny random
- trojúhelník znovu vykreslí na nových souřadnicích
Trojúhelník se uchovává jako objekt v globální proměnné, podprogramu ho zpřístupníme direktivou global
.
Program lze vynecháním (zakomentováním) jediného řádku změnit tak, že se zelený trojúhelník nepřesouvá, ale duplikuje na plátně. Samozřejmě tak, jak je program nyní postaven, ztrácíme odkazy na jednotlivé objekty, nicméně i to lze následně vyřešit dalšími metodami plátna (Canvas) jako např. platno.find_all()
.
Nyní už umíme propojit tlačítka s obslužnými akcemi. Příště si přidáme ovládání objektu pomocí událostí klávesnice.