# 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()
```