scrollbar does not work in recent chaco releases
<p>This program was running fine in chaco 3.2, but with chaco 4, scrollbar does not show at all.</p>

<p>I would like either to find the problem or find a workaround.</p>

<p>PanTool may be a workaround, but this will conflict with some linecursors used with mouse.</p>

<pre><code>#!/usr/bin/env python

# Major library imports
from numpy import linspace
from scipy.special import jn

# Enthought library imports
from enthought.enable.api import Component, ComponentEditor
from enthought.traits.api import HasTraits, Instance
from enthought.traits.ui.api import Item, Group, View

# Chaco imports
from enthought.chaco.api import ArrayPlotData, VPlotContainer, \
    Plot, OverlayPlotContainer, add_default_axes, add_default_grids
from enthought.chaco.plotscrollbar import PlotScrollBar
from enthought.chaco.tools.api import PanTool, ZoomTool

#===============================================================================
# # Create the Chaco plot.
#===============================================================================
def _create_plot_component():

    # Create some x-y data series to plot
    x = linspace(-2.0, 10.0, 100)
    pd = ArrayPlotData(index = x)
    for i in range(5):
        pd.set_data("y" + str(i), jn(i,x))

    # Create some line plots of some of the data
    plot1 = Plot(pd)
    plot1.plot(("index", "y0", "y1", "y2"), name="j_n, n&lt;3", color="red")[0]
    p = plot1.plot(("index", "y3"), name="j_3", color="blue")[0]

    # Add the scrollbar
    plot1.padding_top = 0

    p.index_range.high_setting = 1
    # Create a container and add our plots
    container = OverlayPlotContainer(padding = 5,fill_padding = True,
                                     bgcolor = "lightgray", use_backbuffer=True)
    hscrollbar = PlotScrollBar(component=p, mapper=p.index_mapper,axis="index", resizable="",use_backbuffer = False,
                               height=15,position=(0,0))
    hscrollbar.force_data_update()

    plot1.overlays.append(hscrollbar)


    hgrid,vgrid = add_default_grids(plot1)
    add_default_axes(plot1)
    container.add(plot1)

    container.invalidate_and_redraw()
    return container

#===============================================================================
# Attributes to use for the plot view.
size=(900,500)
title="Scrollbar example"

#===============================================================================
# # Demo class that is used by the demo.py application.
#===============================================================================
class Demo(HasTraits):
    plot = Instance(Component)

    traits_view = View(
                    Group(
                        Item('plot', editor=ComponentEditor(size=size),
                             show_label=False),
                        orientation = "vertical"),
                    resizable=True, title=title
                    )

    def _plot_default(self):
         return _create_plot_component()

demo = Demo()

if __name__ == "__main__":
    demo.configure_traits()

#--EOF---
</code></pre>

<p>We investigated and found some problems in the code of enable api (<a href="https://github.com/enthought/enable" rel="nofollow">https://github.com/enthought/enable</a>), that had disallowed the scrollbar to display in wx backend.</p>

<p>The following patch solves the problem.</p>

<p>There are other issues, like height setting that does not work, we will continue to investigate.</p>

<pre><code>diff --git a/enable/wx/scrollbar.py b/enable/wx/scrollbar.py
index 02d0da0..003cc90 100644
--- a/enable/wx/scrollbar.py
+++ b/enable/wx/scrollbar.py
@@ -136,7 +136,7 @@
     # We have to do this flip_y business because wx and enable use opposite
     # coordinate systems, and enable defines the component's position as its
     # lower left corner, while wx defines it as the upper left corner.
-        window = getattr(gc, "window", None)
+        window = getattr(self, "window", None)
     if window is None:
         return
     wx_ypos = window._flip_y(wx_ypos)
</code></pre>

python plot enthought chaco