Source code for ttkwidgets.frames.toggledframe

"""
Author: RedFantom
License: GNU GPLv3
Source: This repository
"""
try:
    import Tkinter as tk
    import ttk
except ImportError:
    import tkinter as tk
    from tkinter import ttk
import os
from PIL import Image, ImageTk
from ttkwidgets.utilities import get_assets_directory


[docs]class ToggledFrame(ttk.Frame): """ A frame that can be toggled to open and close. :ivar interior: :class:`ttk.Frame` in which to put the widgets to be toggled with any geometry manager. """
[docs] def __init__(self, master=None, text="", width=20, compound=tk.LEFT, **kwargs): """ Create a ToggledFrame. :param master: master widget :type master: widget :param text: text to display next to the toggle arrow :type text: str :param width: width of the closed ToggledFrame (in characters) :type width: int :param compound: "center", "none", "top", "bottom", "right" or "left": position of the toggle arrow compared to the text :type compound: str :param kwargs: keyword arguments passed on to the :class:`ttk.Frame` initializer """ ttk.Frame.__init__(self, master, **kwargs) self._open = False self.__checkbutton_var = tk.BooleanVar() self._open_image = ImageTk.PhotoImage(Image.open(os.path.join(get_assets_directory(), "open.png"))) self._closed_image = ImageTk.PhotoImage(Image.open(os.path.join(get_assets_directory(), "closed.png"))) self._checkbutton = ttk.Checkbutton(self, style="Toolbutton", command=self.toggle, variable=self.__checkbutton_var, text=text, compound=compound, image=self._closed_image, width=width) self.interior = ttk.Frame(self, relief=tk.SUNKEN) self._grid_widgets()
def _grid_widgets(self): self._checkbutton.grid(row=0, column=0, sticky="we")
[docs] def toggle(self): """Toggle :obj:`ToggledFrame.interior` opened or closed.""" if self._open: self._open = False self.__checkbutton_var.set(False) self.interior.grid_forget() self._checkbutton.config(image=self._closed_image) else: self._open = True self.__checkbutton_var.set(True) self.interior.grid(row=1, column=0, sticky="nswe") self._checkbutton.config(image=self._open_image)