Tkinter


Slider Widget

Sliders on a mixer Slider neboli posuvník je objekt Tkinteru, jímž může uživatel zadat hodnotu změnou indikátoru. Posuvníky mohou být orientováné horizontálně nebo vertikálně.

Posuvník se vytvoří jako instance třídy Scale. Číselná hodnota v zadaném rozsahu se nastaví posunem posuvného tlačítka. Minimální a maximální hodnoty se zadávají jako parametry, stejně jako kroky mezi jednotlivými hodnotami. Widget Scale je dobrou alternativou pro widget Entry, očekává-li se zadání číselné hodnoty od uživatelele.

Jednoduchý příklad

from tkinter import *

master = Tk()
w = Scale(master, from_=0, to=42)
w.pack()
w = Scale(master, from_=0, to=200, orient=HORIZONTAL)
w.pack()

mainloop()
Spustíme-li tento skript, dostame okno s vertikálním a horizontálním posuvníkem:

Horizontal and vertical sliders

Přístup k hodnotám posuvníku

V přechozím příkladě jsme si ukázali, jak se vytvoří posuvník. Samotný posuvník nám ale nestačí, potřebujeme způsob, jak vytěžit jeho hodnoty. Předchozí příklad rozšíříme o tlačítko Show a hodnoty posuvníku získáme metodou get(). Při stisku tlačítka Show se aktuální hodnoty vytisknou do terminálu, ze kterého skript spouštíme:

from tkinter import *

def show_values():
    print (w1.get(), w2.get())

master = Tk()
w1 = Scale(master, from_=0, to=42)
w1.pack()
w2 = Scale(master, from_=0, to=200, orient=HORIZONTAL)
w2.pack()
Button(master, text='Show', command=show_values).pack()

mainloop()


Počáteční hodnoty posuvníků

Nastavenou počáteční hodnotu lze korigovat metodou set().
from tkinter import *

def show_values():
    print (w1.get(), w2.get())

master = Tk()
w1 = Scale(master, from_=0, to=42)
w1.set(19)
w1.pack()
w2 = Scale(master, from_=0, to=200, orient=HORIZONTAL)
w2.set(23)
w2.pack()
Button(master, text='Show', command=show_values).pack()

mainloop()

Volaný skript vypadá takto:

IMproved Slider Example

Dobrou ukázkou (tutorialspoint) je posuvník s deklarovanou proměnnou, která umožňuje přenos hodnoty z posuvníku do popisku:
from kinter import *

def sel():
   selection = "Value = " + str(var.get())
   label.config(text = selection)

root = Tk()
var = DoubleVar()
scale = Scale( root, variable = var )
scale.pack(anchor=CENTER)

button = Button(root, text="Get Scale Value", command=sel)
button.pack(anchor=CENTER)

label = Label(root)
label.pack()

root.mainloop()


IMproved Slider Example

Délka kroku

Je-li zadán parametr tickinterval (délka kroku) jistou hodnotou, potom se kroky stupnice zobrazí jako násobky této hodnoty. Přidáme jej do předchozího příkladu:

from tkinter import *

def show_values():
    print (w1.get(), w2.get())

master = Tk()
w1 = Scale(master, from_=0, to=42, tickinterval=8)
w1.set(19)
w1.pack()
w2 = Scale(master, from_=0, to=200, tickinterval=10, 
           orient=HORIZONTAL)
w2.set(23)
w2.pack()
Button(master, text='Show', command=show_values).pack()

mainloop()
Spustíme-li tento program, uvidíme u vertikálního posuvníku stupnici 0, 8, 16, 24, 32, 40. U horizontálního posuvníku tuto stupnici neuvidíme, prototože je posuvník příliš krátký:

Illegible tickintervals

Abychom tento problém vyřešili, musíme zvětšit délku horizontálního posuvníku. Uděláme to tak, že do definice posuvníku w2 přidáme parametr "length":

w2 = Scale(master, from_=0, to=200, length=600,
           tickinterval=10, orient=HORIZONTAL)


Výsledek vypadá takto:

Increasing the length of a slider