Hi, I also struggled with that and what worked in the end for me is using wx.ScrolledWindow as opposed to a panel. This is the documentations which I was reading:
http://xoomer.virgilio.it/infinity77/wxPython/Widgets/wx.ScrolledWindow.htmlTo make the window scrollable, I used the command SetScrollRate as described in the third bullet at the top in the document above.
In addition, to set the size of the window (the actual window which appears on the screen with the scrollbars, and not the virtual window through which you are scrolling), I used the SetMinSize command on the ScrolledWindow.
Finally, in my case was populating the scrolled window with widgets during the program was running. In that case in order to show the widgets I used the Layout() command and afterwards FitInside as opposed to Fit in order to keep the same, as Fit will change the size of the scrolled window.
If the above explanation is confusing, you can send a simple and complete executable example script (not just a class) and I can take a closer look.