  
      def add_scrollbar(self):
          """ Add a scrollbar to the options frame """
          logger.debug("Add Config Scrollbar")
          scrollbar = ttk.Scrollbar(self, command=self.canvas.yview)
          scrollbar.pack(side=tk.RIGHT, fill=tk.Y)
          self.canvas.config(yscrollcommand=scrollbar.set)
          self.mainframe.bind("<Configure>", self.update_scrollbar)
          logger.debug("Added Config Scrollbar")
  
 
</s> remove         self.canvas.config(yscrollcommand=scrollbar.set)
 </s> add         self._canvas.config(yscrollcommand=scrollbar.set) </s> remove         self.canvas.configure(scrollregion=self.canvas.bbox("all"))
 </s> add         self._canvas.configure(scrollregion=self._canvas.bbox("all")) </s> remove         self.canvas.itemconfig(self.optscanvas, width=canvas_width)
 </s> add         self._canvas.itemconfig(self._optscanvas, width=canvas_width) </s> remove         self.add_scrollbar()
        self.canvas.bind("<Configure>", self.resize_frame)
 </s> add         if scrollbar:
            self.add_scrollbar()
        self._canvas.bind("<Configure>", self.resize_frame) </s> remove     def build_panel(self, blank_nones):
 </s> add     def build_panel(self, blank_nones, scrollbar):
        scrollbar = ttk.Scrollbar(self, command=self._canvas.yview)
  
      def add_scrollbar(self):
          """ Add a scrollbar to the options frame """
          logger.debug("Add Config Scrollbar")
        scrollbar = ttk.Scrollbar(self, command=self._canvas.yview)
          scrollbar.pack(side=tk.RIGHT, fill=tk.Y)
          self.canvas.config(yscrollcommand=scrollbar.set)
          self.mainframe.bind("<Configure>", self.update_scrollbar)
          logger.debug("Added Config Scrollbar")
  
keep keep keep keep replace keep keep keep keep keep
 Core updates (#982)

* plugins.extract.align
  - Expose normalization method

* lib.gui core updates
  - Minor updates to support future development. 
lib/gui/control_helper.py