Panel plegable en Tkinter | Python

Un panel plegable, como sugiere su nombre, es un panel que se puede contraer. El usuario puede expandir el panel para que pueda realizar alguna tarea y cuando se completa la tarea, el panel se puede contraer. 
En Tkinter, el panel plegable es un contenedor con un control similar a un botón incrustado que se usa para expandir o contraer este contenedor.
requisitos previos: 
 

Frame Class
Checkbutton Class
Styling in widgets
configure() method

Clase 
CollapsiblePane: el widget CollapsiblePane se usa para almacenar cualquier otro widget dentro de él. Se puede activar o desactivar, por lo que los widgets que contiene no siempre se muestran. 
 

Parámetros: 
parent = El padre del widget. 
texto_expandido = El texto que se muestra en el botón cuando el panel está abierto. 
colapsado_text = El texto que se muestra en el Botón cuando el panel está cerrado.
Funciones: 
_activate() = Comprueba el valor de la variable y muestra u oculta el Marco. 
toggle() = Cambia el LabelFrame al estado opuesto.
Widgets: 
self_button = El botón que alterna el marco. 
frame = El marco que contiene el widget. 
_separator = El Separador.

Python3

# Implementation of Collapsible Pane container
 
# importing tkinter and ttk modules
import tkinter as tk
from tkinter import ttk
 
class CollapsiblePane(ttk.Frame):
    """
     -----USAGE-----
    collapsiblePane = CollapsiblePane(parent,
                          expanded_text =[string],
                          collapsed_text =[string])
 
    collapsiblePane.pack()
    button = Button(collapsiblePane.frame).pack()
    """
 
    def __init__(self, parent, expanded_text ="Collapse <<",
                               collapsed_text ="Expand >>"):
 
        ttk.Frame.__init__(self, parent)
 
        # These are the class variable
        # see a underscore in expanded_text and _collapsed_text
        # this means these are private to class
        self.parent = parent
        self._expanded_text = expanded_text
        self._collapsed_text = collapsed_text
 
        # Here weight implies that it can grow it's
        # size if extra space is available
        # default weight is 0
        self.columnconfigure(1, weight = 1)
 
        # Tkinter variable storing integer value
        self._variable = tk.IntVar()
 
        # Checkbutton is created but will behave as Button
        # cause in style, Button is passed
        # main reason to do this is Button do not support
        # variable option but checkbutton do
        self._button = ttk.Checkbutton(self, variable = self._variable,
                            command = self._activate, style ="TButton")
        self._button.grid(row = 0, column = 0)
 
        # This wil create a separator
        # A separator is a line, we can also set thickness
        self._separator = ttk.Separator(self, orient ="horizontal")
        self._separator.grid(row = 0, column = 1, sticky ="we")
 
        self.frame = ttk.Frame(self)
 
        # This will call activate function of class
        self._activate()
 
    def _activate(self):
        if not self._variable.get():
 
            # As soon as button is pressed it removes this widget
            # but is not destroyed means can be displayed again
            self.frame.grid_forget()
 
            # This will change the text of the checkbutton
            self._button.configure(text = self._collapsed_text)
 
        elif self._variable.get():
            # increasing the frame area so new widgets
            # could reside in this container
            self.frame.grid(row = 1, column = 0, columnspan = 2)
            self._button.configure(text = self._expanded_text)
 
    def toggle(self):
        """Switches the label frame to the opposite state."""
        self._variable.set(not self._variable.get())
        self._activate()

  
Programa para demostrar el uso de CollapsiblePane – 
 

Python3

# Importing tkinter and ttk modules
from tkinter import * from tkinter.ttk import *
 
# Importing Collapsible Pane class that we have
# created in separate file
from collapsiblepane import CollapsiblePane as cp
 
# Making root window or parent window
root = Tk()
root.geometry('200x200')
 
# Creating Object of Collapsible Pane Container
# If we do not pass these strings in
# parameter the default strings will appear
# on button that were, expand >>, collapse <<
cpane = cp(root, 'Expanded', 'Collapsed')
cpane.grid(row = 0, column = 0)
 
# Button and checkbutton, these will
# appear in collapsible pane container
b1 = Button(cpane.frame, text ="GFG").grid(
            row = 1, column = 2, pady = 10)
 
cb1 = Checkbutton(cpane.frame, text ="GFG").grid(
                  row = 2, column = 3, pady = 10)
 
mainloop()

Producción: 
 

Publicación traducida automáticamente

Artículo escrito por sanjeev2552 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *