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