Tkinter Scale
Tkinter Scale is a widget that adds sliders to your GUI. Imagine the sliders you use to adjust volume or brightness on your devices – Tkinter Scale brings that same functionality to your Python applications. It’s a visual way for users to pick values within a set range.
The Tkinter Scale has a classic appearance. If you’re interested in a more updated appearance, you might want to take a look at the ttk scale.
However, in this tutorial, we’ll focus solely on the traditional Tkinter scale widget.
Creating Your First Slider
Now, let’s make our very first basic Tkinter slider.
Example:
import tkinter as tk root = tk.Tk() root.title("My First Slider") slider = tk.Scale(root, from_=0, to=100) slider.pack() root.mainloop()
Output:
Mainly Used Tkinter Scale Options
Tkinter Scale widgets offer a range of options to fine-tune your sliders, making them perfect for various applications. Let’s explore some mostly used options:
from_
: This sets the starting value of your slider. Users can select values from this minimum value onwards.
to
: Conversely, this sets the maximum value of your slider. Users can choose values up to this maximum.
digits
: Control how many decimal places are shown for float values. It helps you manage precision in your slider’s displayed values.
length
: Determine how long your slider track appears. This affects how much space the slider takes up in your layout, measured in pixels.
width
: Adjust the width of the slider handle. This affects its visual appearance and how easy it is to click or interact with.
orient
: Choose whether your slider is horizontal (tk.HORIZONTAL
) or vertical (tk.VERTICAL
). This determines its orientation in your layout.
command
: Specify a function to call whenever the slider value changes. This allows you to dynamically respond to user interactions with the slider.
Example:
import tkinter as tk def update_value(new_value): label.config(text=f"Value: {new_value}") root = tk.Tk() root.title("Slider Customization") slider = tk.Scale(root, from_=0, to=10, digits=2, length=300, width=20, orient="horizontal", command=update_value) slider.pack() label = tk.Label(root, text="Value: 0") label.pack() root.mainloop()
Output:
Enhancing Slider Appearance
In Tkinter, sliders are not just functional; they can also be styled to match the aesthetic of your application. Two key options for customizing the appearance of sliders are sliderrelief
and sliderlength
.
sliderrelief | This option controls the visual appearance of the slider thumb or handle. It allows you to choose from various relief styles, such as flat, raised, sunken, or groove, to give the slider a distinct appearance. |
sliderlength | The sliderlength option sets the length of the slider handle or thumb. |
Here’s how you can use both options together:
Example:
import tkinter as tk # Create the main Tkinter window root = tk.Tk() root.title("Styled Slider") # Create a Scale widget with customized relief and length slider = tk.Scale(root, from_=0, to=100, sliderrelief="flat", sliderlength=40) slider.pack() # Start the Tkinter event loop root.mainloop()
Output:
Additional Tkinter Scale Options
Now, let’s explore some additional options that make your sliders more informative and user-friendly.
Here’s an example that tells you about these additional options:
Example:
import tkinter as tk # Function to update the displayed value and slider variable def update_value(new_value): display_label.config(text=f"Value: {new_value}") slider_variable.set(new_value) # Create the main Tkinter window root = tk.Tk() root.title("Enhanced Slider") # Create a Tkinter variable to store the slider value slider_variable = tk.DoubleVar() # Create a Scale widget with label, variable, showvalue, and command options slider = tk.Scale(root, from_=0, to=100, label="Adjust Volume:", variable=slider_variable, showvalue=True, command=update_value) slider.pack() # Create a label to display the current slider value dynamically display_label = tk.Label(root, text="Value: 0") display_label.pack() # Start the Tkinter event loop root.mainloop()
In this example:
The label
option adds a description to the slider, like “Adjust Volume”.
The variable
option links the slider to a variable (slider_variable
) for easy value access.
The showvalue
option controls whether the current value of the slider is displayed next to the slider visually.
The command
option calls the update_value()
function whenever the slider value changes.
Output:
Here are the other standard options for customizing the Tkinter Scale widget:
activebackground
background
borderwidth
cursor
font
foreground
highlightbackground
highlightthickness
orient
relief
takefocus
troughcolor
For more details on these options, you can check out the Tkinter Standard Options.
Example:
import tkinter as tk # Create the main Tkinter window root = tk.Tk() root.title("Unique Slider Designs") # Create and configure Slider 1 slider1 = tk.Scale(root, from_=0, to=100, orient="horizontal", length=200, sliderlength=20, font="times 16 bold", troughcolor="lightgreen", foreground="red") slider1.pack(pady=10) # Create and configure Slider 2 slider2 = tk.Scale(root, from_=50, to=200, orient="horizontal", length=200, sliderlength=50, font="georgia 16 bold", troughcolor="lightblue", highlightthickness=5, highlightbackground="purple") slider2.pack(pady=10) # Create and configure Slider 3 slider3 = tk.Scale(root, from_=0.0, to=10.0, orient="horizontal", length=200, sliderlength=5.0, font="georgia 16 bold", troughcolor="orange", background="red", foreground="white", highlightthickness=20, highlightbackground="pink") slider3.pack(pady=10) # Start the Tkinter event loop root.mainloop()
Output :
Event Binding with Tkinter Scale
Event binding involves associating a function or callback with a specific event that occurs within a Tkinter widget. For Tkinter Scale widgets, common events include "<ButtonRelease-1>"
(mouse button released) and "<Motion>"
(mouse movement).
Example:
import tkinter as tk def slider_released(event): display_label.config(text=f"Released Value: {slider.get()}") root = tk.Tk() root.title("Events and Sliders") slider = tk.Scale(root, from_=0, to=100, font="arial 16") slider.pack() display_label = tk.Label(root, text="Released Value: 0", font="arial 16") display_label.pack() slider.bind("<ButtonRelease-1>", slider_released) root.mainloop()