Module TkZero.Scale

Creates a themed scale. (Slider)

Expand source code
"""
Creates a themed scale. (Slider)
"""

import tkinter as tk
from tkinter import ttk
from typing import Union, Callable


class OrientModes:
    """
    The orient modes for scales.
    Horizontal - makes the scale horizontal and slides left and right.
    Vertical - makes the scale vertical and slides up and down.
    """

    Horizontal = tk.HORIZONTAL
    Vertical = tk.VERTICAL


class Scale(ttk.Scale):
    def __init__(
        self,
        parent: Union[tk.Widget, Union[tk.Tk, tk.Toplevel]],
        length: int,
        minimum: Union[int, float],
        maximum: Union[int, float],
        orientation: str = OrientModes.Horizontal,
        command: Callable = None,
    ):
        """
        Initiate a ttk.Scrollbar.

        :param parent: The parent of the scrollbar.
        :param length: An int, which is the length of the scale.
        :param minimum: The minimum value of the scale, an int or a float.
        :param maximum: The maximum value of the scale, an int or a float.
        :param orientation: The orientation of the scrollbar and what
         direction it should scroll the widget in. Defaults to
         OrientModes.Horizontal and is a str.
        :param command: The command to call when the scale changes. Will be
         passed in a positional float as the new value.
        """
        if not isinstance(parent, (tk.Widget, tk.Tk, tk.Toplevel)):
            raise TypeError(
                f"parent is not a "
                f"Union[tk.Widget, Union[tk.Tk, tk.Toplevel]]! "
                f"(type passed in: {repr(type(parent))})"
            )
        if not isinstance(length, int):
            raise TypeError(
                f"length is not a int! (type passed in: {repr(type(length))})"
            )
        if not isinstance(minimum, (int, float)):
            raise TypeError(
                f"minimum is not an int or a float! "
                f"(type passed in: {repr(type(minimum))})"
            )
        if not isinstance(maximum, float):
            raise TypeError(
                f"maximum is not an int or a float! "
                f"(type passed in: {repr(type(maximum))})"
            )
        if not isinstance(orientation, str):
            raise TypeError(
                f"orientation is not a str! "
                f"(type passed in: {repr(type(orientation))})"
            )
        super().__init__(
            master=parent,
            orient=orientation,
            length=length,
            from_=float(minimum),
            to=float(maximum),
            command=lambda new_val: command(float(new_val))
            if command is not None
            else None,
        )
        self._style_root = "TScale"
        self._enabled = True
        self._orientation = orientation
        self._hovering_over = False
        self.bind("<Enter>", lambda _: self._set_hover_state(True))
        self.bind("<Leave>", lambda _: self._set_hover_state(False))

    @property
    def value(self) -> float:
        """
        Get the value on this scale.

        :return: A float.
        """
        return self.get()

    @value.setter
    def value(self, new_value: Union[int, float]) -> None:
        """
        Set the value on this scale.

        :param new_value: A float or an int.
        :return: None.
        """
        if not isinstance(new_value, (float, int)):
            raise TypeError(
                f"new_value is not a float or an int! "
                f"(type passed in: {repr(type(new_value))})"
            )
        self.set(float(new_value))

    @property
    def enabled(self) -> bool:
        """
        Get whether this widget is in normal mode or disabled mode. (grayed
        out and cannot interact with)

        :return: A bool, True if normal otherwise False.
        """
        return self._enabled

    @enabled.setter
    def enabled(self, new_state: bool) -> None:
        """
        Set whether this widget is in normal mode or disabled mode. (grayed
        out and cannot interact with)

        :param new_state: The new state (a bool) True for enabled and False
         for disabled.
        :return: None.
        """
        if not isinstance(new_state, bool):
            raise TypeError(
                f"new_state is not a bool! "
                f"(type passed in: {repr(type(new_state))})"
            )
        self._enabled = new_state
        self.state(["!disabled" if self._enabled else "disabled"])

    @property
    def hovering_over(self) -> bool:
        """
        Get whether the cursor is hovering over this widget or not.

        :return: A bool.
        """
        return self._hovering_over

    def _set_hover_state(self, is_hovering: bool) -> None:
        """
        Set whether we are hovering over this widget or not.

        :param is_hovering: A bool.
        :return: None.
        """
        self._hovering_over = is_hovering

Classes

class OrientModes

The orient modes for scales. Horizontal - makes the scale horizontal and slides left and right. Vertical - makes the scale vertical and slides up and down.

Expand source code
class OrientModes:
    """
    The orient modes for scales.
    Horizontal - makes the scale horizontal and slides left and right.
    Vertical - makes the scale vertical and slides up and down.
    """

    Horizontal = tk.HORIZONTAL
    Vertical = tk.VERTICAL

Class variables

var Horizontal
var Vertical
class Scale (parent: Union[tkinter.Widget, tkinter.Tk, tkinter.Toplevel], length: int, minimum: Union[int, float], maximum: Union[int, float], orientation: str = 'horizontal', command: Callable = None)

Ttk Scale widget is typically used to control the numeric value of a linked variable that varies uniformly over some range.

Initiate a ttk.Scrollbar.

:param parent: The parent of the scrollbar. :param length: An int, which is the length of the scale. :param minimum: The minimum value of the scale, an int or a float. :param maximum: The maximum value of the scale, an int or a float. :param orientation: The orientation of the scrollbar and what direction it should scroll the widget in. Defaults to OrientModes.Horizontal and is a str. :param command: The command to call when the scale changes. Will be passed in a positional float as the new value.

Expand source code
class Scale(ttk.Scale):
    def __init__(
        self,
        parent: Union[tk.Widget, Union[tk.Tk, tk.Toplevel]],
        length: int,
        minimum: Union[int, float],
        maximum: Union[int, float],
        orientation: str = OrientModes.Horizontal,
        command: Callable = None,
    ):
        """
        Initiate a ttk.Scrollbar.

        :param parent: The parent of the scrollbar.
        :param length: An int, which is the length of the scale.
        :param minimum: The minimum value of the scale, an int or a float.
        :param maximum: The maximum value of the scale, an int or a float.
        :param orientation: The orientation of the scrollbar and what
         direction it should scroll the widget in. Defaults to
         OrientModes.Horizontal and is a str.
        :param command: The command to call when the scale changes. Will be
         passed in a positional float as the new value.
        """
        if not isinstance(parent, (tk.Widget, tk.Tk, tk.Toplevel)):
            raise TypeError(
                f"parent is not a "
                f"Union[tk.Widget, Union[tk.Tk, tk.Toplevel]]! "
                f"(type passed in: {repr(type(parent))})"
            )
        if not isinstance(length, int):
            raise TypeError(
                f"length is not a int! (type passed in: {repr(type(length))})"
            )
        if not isinstance(minimum, (int, float)):
            raise TypeError(
                f"minimum is not an int or a float! "
                f"(type passed in: {repr(type(minimum))})"
            )
        if not isinstance(maximum, float):
            raise TypeError(
                f"maximum is not an int or a float! "
                f"(type passed in: {repr(type(maximum))})"
            )
        if not isinstance(orientation, str):
            raise TypeError(
                f"orientation is not a str! "
                f"(type passed in: {repr(type(orientation))})"
            )
        super().__init__(
            master=parent,
            orient=orientation,
            length=length,
            from_=float(minimum),
            to=float(maximum),
            command=lambda new_val: command(float(new_val))
            if command is not None
            else None,
        )
        self._style_root = "TScale"
        self._enabled = True
        self._orientation = orientation
        self._hovering_over = False
        self.bind("<Enter>", lambda _: self._set_hover_state(True))
        self.bind("<Leave>", lambda _: self._set_hover_state(False))

    @property
    def value(self) -> float:
        """
        Get the value on this scale.

        :return: A float.
        """
        return self.get()

    @value.setter
    def value(self, new_value: Union[int, float]) -> None:
        """
        Set the value on this scale.

        :param new_value: A float or an int.
        :return: None.
        """
        if not isinstance(new_value, (float, int)):
            raise TypeError(
                f"new_value is not a float or an int! "
                f"(type passed in: {repr(type(new_value))})"
            )
        self.set(float(new_value))

    @property
    def enabled(self) -> bool:
        """
        Get whether this widget is in normal mode or disabled mode. (grayed
        out and cannot interact with)

        :return: A bool, True if normal otherwise False.
        """
        return self._enabled

    @enabled.setter
    def enabled(self, new_state: bool) -> None:
        """
        Set whether this widget is in normal mode or disabled mode. (grayed
        out and cannot interact with)

        :param new_state: The new state (a bool) True for enabled and False
         for disabled.
        :return: None.
        """
        if not isinstance(new_state, bool):
            raise TypeError(
                f"new_state is not a bool! "
                f"(type passed in: {repr(type(new_state))})"
            )
        self._enabled = new_state
        self.state(["!disabled" if self._enabled else "disabled"])

    @property
    def hovering_over(self) -> bool:
        """
        Get whether the cursor is hovering over this widget or not.

        :return: A bool.
        """
        return self._hovering_over

    def _set_hover_state(self, is_hovering: bool) -> None:
        """
        Set whether we are hovering over this widget or not.

        :param is_hovering: A bool.
        :return: None.
        """
        self._hovering_over = is_hovering

Ancestors

  • tkinter.ttk.Scale
  • tkinter.ttk.Widget
  • tkinter.Scale
  • tkinter.Widget
  • tkinter.BaseWidget
  • tkinter.Misc
  • tkinter.Pack
  • tkinter.Place
  • tkinter.Grid

Instance variables

var enabled : bool

Get whether this widget is in normal mode or disabled mode. (grayed out and cannot interact with)

:return: A bool, True if normal otherwise False.

Expand source code
@property
def enabled(self) -> bool:
    """
    Get whether this widget is in normal mode or disabled mode. (grayed
    out and cannot interact with)

    :return: A bool, True if normal otherwise False.
    """
    return self._enabled
var hovering_over : bool

Get whether the cursor is hovering over this widget or not.

:return: A bool.

Expand source code
@property
def hovering_over(self) -> bool:
    """
    Get whether the cursor is hovering over this widget or not.

    :return: A bool.
    """
    return self._hovering_over
var value : float

Get the value on this scale.

:return: A float.

Expand source code
@property
def value(self) -> float:
    """
    Get the value on this scale.

    :return: A float.
    """
    return self.get()