Tkinter

Button Widget

Tk widgets Widget "button" neboli tlačítko, je instance třídy Button, která se používá pro tvorbu tlačítek různého druhu. Objekt "button" umožňuje interaktivní komunikaci s uživatelem. Stiskem tlačítka prostřednictvím myši může být spuštěna nějaká akce. Tlačítka mohou také obsahovat text a obrázky, stejně jako popisky (labels). Zatímco však text v popiscích může být zobrazen různými fonty, v tlačítku lze použít pouze jeden font. Text tlačítka ale může mít více řádků.

Deklarace tlačítka pomocí vlastní třídy

Následující skript definuje dvě tlačítka: jedno pro zavření aplikace, druhé pro zobrazení textu "Tkinter is easy to use!".

from tkinter import *

class App:
    def __init__(self, master): 
        frame = Frame(master)
        frame.pack()
        self.button = Button(frame, 
                     text="QUIT", fg="red",
                     command=frame.quit)
        self.button.pack(side=LEFT)
        self.slogan = Button(frame,
                     text="Hello",
                     command=self.write_slogan)
        self.slogan.pack(side=LEFT)
    def write_slogan(self):
        print "Tkinter is easy to use!"

root = Tk()
app = App(root)
root.mainloop()


Výsledek předchozího skriptu vypadá takto:

Example Button class

Poznámka:
Při používání IDLE nebo Pyscripter se vyvarujeme použití příkazu "QUIT" pro zavření okna.
IDLE i Pyscripter používájí Tkinter i nativní metodu "quit". Při použití "quit" v uživatelském programu dojde k nepříjemné kolizi našeho programu s programem IDE.

Dynamický obsah tlačítka

V následujícím příkladě vytvoříme tlačítko s číslem postupně se zvětšujícím o hodnotu 1, dokud se nestiskne tlačítko Stop:

import tkinter as tk

counter = 0 
def counter_label(label):
    counter = 0
    def count():
        global counter
        counter += 1
        label.config(text=str(counter))
        label.after(1000, count)
    count()
 
 
root = tk.Tk()
root.title("Counting Seconds")
label = tk.Label(root, fg="dark green")
label.pack()
counter_label(label)
button = tk.Button(root, text='Stop', width=25,
                   command=root.destroy)
button.pack()
root.mainloop()
Výsledek předchozího skriptu vypadá takto:

dynamic label