Making Window Scrollable after window goes less than a particular size

I’ve never used VirtualSize and don’t know what it’s used for. :roll_eyes:
I think wx.Sizer refers to client MinSize to calculate its own best size (maybe).
So you should do like this:

# set client minsize
>>> self.MinSize=(300,300)
>>> self.Parent.SendSizeEvent()

The wx.SizeEvent is needed to refresh the scrollbars.

Hi,
So can I just use:-
self.notebook_1_pane_1 = wx.ScrolledWindow(self.nb,-1, size=(screenWidth,400), pos=(0,28), style=wx.SIMPLE_BORDER)

in place of: -

self.notebook_1_pane_1 = wx.lib.scrolledpanel.ScrolledPanel(self.nb,-1, size=(screenWidth,400), pos=(0,28), style=wx.SIMPLE_BORDER)

or some more modifications are needed?

Hi,
panel.SetVirtualSize(w,h) is used for setting the virtual size of our panel.

If the Virtual size is less than the client size, scrollbars are added (if panel.SetupScrolling() is done)

Is this what you intended?

import wx
import wx.lib
import wx.lib.scrolledpanel


class MyFrame(wx.Frame):
    def __init__(self, *args, **kwds):
        screenSize = wx.DisplaySize()
        screenWidth = screenSize[0]
        screenHeight = screenSize[1]
        
        kwds["style"] = kwds.get("style", 0) | wx.DEFAULT_FRAME_STYLE
        wx.Frame.__init__(self, *args, **kwds)

        sizer_1 = wx.BoxSizer(wx.VERTICAL)
        self.nb = wx.Notebook(self, wx.ID_ANY)
        sizer_1.Add(self.nb, 1, wx.EXPAND, 0)
        
        self.notebook_1_pane_1 = wx.lib.scrolledpanel.ScrolledPanel(self.nb, -1,)
            # size=(screenWidth,400), pos=(0,28), style=wx.SIMPLE_BORDER)
        self.notebook_1_pane_1.SetupScrolling()

        self.nb.AddPage(self.notebook_1_pane_1, "page")
        
        page = wx.Panel(self.notebook_1_pane_1, size=(screenWidth,400))
        page.SetBackgroundColour('blue')

        sizer = wx.BoxSizer()
        sizer.Add(page)
        self.notebook_1_pane_1.SetSizer(sizer)

        self.SetSizer(sizer_1)
        self.Layout()
        self.Update()


class MyApp(wx.App):
    def OnInit(self):
        self.frame = MyFrame(None, wx.ID_ANY, "")
        self.SetTopWindow(self.frame)
        self.frame.Show()
        return True

if __name__ == "__main__":
    app = MyApp(0)
    app.MainLoop()

No, sadly this also is no working… The result that I’m getting is changed, but far from what I desire :slightly_frowning_face: