# Implementation of Collapsible Pane container# importing tkinter and ttk modulesimporttkinterastkfromtkinterimportttkclassCollapsiblePane(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 classself.parent=parentself._expanded_text=expanded_textself._collapsed_text=collapsed_text# Here weight implies that it can grow it's# size if extra space is available# default weight is 0self.columnconfigure(1,weight=1)# Tkinter variable storing integer valueself._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 doself._button=ttk.Checkbutton(self,variable=self._variable,command=self._activate,style="TButton")self._button.grid(row=0,column=0)# This will create a separator# A separator is a line, we can also set thicknessself._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 classself._activate()def_activate(self):ifnotself._variable.get():# As soon as button is pressed it removes this widget# but is not destroyed means can be displayed againself.frame.grid_forget()# This will change the text of the checkbuttonself._button.configure(text=self._collapsed_text)elifself._variable.get():# increasing the frame area so new widgets# could reside in this containerself.frame.grid(row=1,column=0,columnspan=2)self._button.configure(text=self._expanded_text)deftoggle(self):"""Switches the label frame to the opposite state."""self._variable.set(notself._variable.get())self._activate()