# Interaktivní Stavový diagram v pythonu Jednou z nejjednodušších možností vytvoření a zobrazení grafu je pomocí knihovny `GraphViz`, která umí generovat obrázky ze zadaného popisu grafu a obrázek následně načíst a zobrazit pomocí knihovny `Pillow`. ## Stavový diagram Samotný stavový diagram lze vytvořit pomocí knihovny `GraphViz`. ``` pip install graphviz ``` Vygenerování stavového diagramu do obrázku pak může vypadat následovně: ```python import graphviz dot = graphviz.Digraph() dot.node('A', 'Stav A') dot.node('B', 'Stav B') dot.edge('A', 'B', '0') dot.node('B', style='filled', fillcolor='yellow') dot.render('automat', format='png') ``` ## Zobrazení v okně Jedna z možností, jak otevřít grafické okno je pomocí balíčku `pillow`. ``` pip instal pillow ``` Zobrazení může vypadat tak, že se nahraje obrázek vygenerovaný pomocí `graphviz` a přiřadí se do okna: ```python from PIL import Image, ImageTk import tkinter as tk root = tk.Tk() label = tk.Label(root) label.pack() img = Image.open('automat.png') img_tk = ImageTk.PhotoImage(img) label.config(image=img_tk) root.mainloop() ``` ## Interaktivita Pro čtení z klávesnice lze využít balík `keyboard`. ``` pip install keyboard ``` Před hlavní smyčkou okna pak lze zaregistrovat jednotlivé klávesy a reakci na ně: ```python import tkinter as tk import keyboard def key_pressed(event): if event == 'q': root.quit() var.set(event) root = tk.Tk() var = tk.StringVar() label = tk.Label( root, textvariable=var) var.set("Stiskni klavesu") label.pack() keyboard.on_press_key("0", lambda _: key_pressed("0")) keyboard.on_press_key("1", lambda _: key_pressed("1")) keyboard.on_press_key("q", lambda _: key_pressed("q")) root.mainloop() ```