В моем приложении wx Python 4.1.0 я наследую от wx.Frame
, затем создаю основную панель из wx.Panel
, добавляю ScrolledPanel
и к нему добавляю wx.Bitmap
как ребенок. Это растровое изображение / изображение больше по высоте, чем прокручиваемая панель, поэтому отображается вертикальная полоса прокрутки - все, как ожидалось.
Затем я добавляю еще wx.Panel
под этой прокручиваемой панелью, без дочерних элементов, но только это убирает полосу прокрутки на прокручиваемой панели. Это ошибка или особенность?
Вот полностью рабочий пример.
Раскомментируйте код в def init_panel(self)
, чтобы увидеть странное поведение:
import wx
import wx.grid
import wx.lib.intctrl
import wx.lib.scrolledpanel
class TestApp(wx.Frame):
IMAGE_SIZE = 800
SCROLL_SPEED = 10
def __init__(self):
super(TestApp, self).__init__(
None, title="wxPython Test", style=wx.DEFAULT_FRAME_STYLE ^ wx.RESIZE_BORDER,
)
self.init_panel()
self.main_panel.Layout()
self.main_panel.Fit()
self.Center()
self.Show()
def init_panel(self):
self.main_panel = wx.Panel(self)
self.main_sizer = wx.BoxSizer(wx.VERTICAL)
self.main_panel.SetSizer(self.main_sizer)
self.bitmaps_panel = wx.lib.scrolledpanel.ScrolledPanel(self.main_panel)
self.bitmaps_panel.SetMinSize((-1, 250))
self.bitmaps_panel.SetupScrolling(scroll_x=False, scroll_y=True, rate_y=self.SCROLL_SPEED)
self.bitmaps_panel.SetAutoLayout(True)
self.bitmaps_sizer = wx.BoxSizer(wx.VERTICAL)
self.bitmaps_panel.SetSizer(self.bitmaps_sizer)
bitmap = wx.Bitmap(wx.Image(self.IMAGE_SIZE, self.IMAGE_SIZE))
self.bitmaps_sizer.Add(wx.StaticBitmap(self.bitmaps_panel, wx.ID_ANY, bitmap))
self.bitmaps_sizer.Fit(self)
self.main_sizer.Add(self.bitmaps_panel, 0, flag=wx.EXPAND)
## With this block commented it works, uncomment to see the scroll bar dissapear
# self.stats_panel = wx.Panel(self)
# self.stats_sizer = wx.BoxSizer(wx.VERTICAL)
# self.stats_panel.SetSizer(self.stats_sizer)
# self.main_sizer.Add(self.stats_panel, 0, flag=wx.EXPAND)
self.main_sizer.Fit(self)
if __name__ == "__main__":
wxapp = wx.App()
app = TestApp()
wxapp.MainLoop()