У меня есть приложение wy Python, которое отображает GUI, полученное из wx.Frame
. Это окно GUI состоит из панели прокрутки для отображения изображений (wx.StaticBitmap
), панели под ней для некоторых строк ввода и другой панели для некоторых строк информации или текста. Все работает отлично, вот скриншот того, как должно выглядеть окно (как из моего минимального рабочего примера, см. Ниже):
Примечание в В частности, в нижней части окна, где вы можете найти четыре строки текста - все как положено. Однако, когда я теперь устанавливаю минимальную высоту для панели растрового изображения, нижняя часть текстовой панели ниже обрезается или обрезается, например:
Когда я устанавливаю переменную MIN_IMAGE_SCROLL_AREA_HEIGHT
в 600
, тогда она работает нормально, но когда она установлена в 700
, я сталкиваюсь с этим проблемным поведением c. Но я не вижу проблемы в своем коде, вы можете мне помочь?
Вот минимально работающий пример:
import wx
import wx.grid
import wx.lib.intctrl
import wx.lib.inspection
import wx.lib.scrolledpanel
class TestApp(wx.Frame):
DEF_IMAGE_SIZE = 800
MIN_IMAGE_SCROLL_AREA_HEIGHT = 700 # with 600 it works correctly
def __init__(self):
super(TestApp, self).__init__(None, title="wxPython Test", style=wx.DEFAULT_FRAME_STYLE ^ wx.RESIZE_BORDER)
self.init_panel()
self.Center()
self.Show()
def init_panel(self):
self.main_panel = wx.Panel(self)
self.bitmaps_panel = wx.lib.scrolledpanel.ScrolledPanel(self.main_panel)
self.bitmaps_panel.SetMinSize((-1, self.MIN_IMAGE_SCROLL_AREA_HEIGHT))
self.bitmaps_panel.SetBackgroundColour("black")
self.main_sizer = wx.BoxSizer(wx.VERTICAL)
self.main_panel.SetSizer(self.main_sizer)
self.bitmaps_sizer = wx.BoxSizer(wx.VERTICAL)
self.bitmaps_panel.SetSizer(self.bitmaps_sizer)
bitmap = wx.Bitmap(wx.Image(self.DEF_IMAGE_SIZE, self.DEF_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)
self.main_sizer.AddSpacer(5)
self.main_sizer.Add(wx.StaticLine(self.main_panel, wx.ID_ANY, size=(self.DEF_IMAGE_SIZE + 30, 1)))
self.main_sizer.AddSpacer(10)
self.input_panel = wx.Panel(self)
self.input_sizer = wx.BoxSizer(wx.VERTICAL)
self.input_panel.SetSizer(self.input_sizer)
self.input_sizer.Add(wx.StaticText(self.input_panel, wx.ID_ANY, label="Input Line"), 0, wx.EXPAND)
self.main_sizer.Add(self.input_panel, 0, flag=wx.EXPAND)
self.main_sizer.AddSpacer(10)
self.main_sizer.Add(wx.StaticLine(self.main_panel, wx.ID_ANY, size=(self.DEF_IMAGE_SIZE + 30, 1)))
self.main_sizer.AddSpacer(10)
self.stats_panel = wx.Panel(self)
self.stats_sizer = wx.BoxSizer(wx.VERTICAL)
self.stats_panel.SetSizer(self.stats_sizer)
self.stats_sizer.Add(wx.StaticText(self.stats_panel, wx.ID_ANY, label="Test Line 1"), 0, wx.EXPAND)
self.stats_sizer.Add(wx.StaticText(self.stats_panel, wx.ID_ANY, label="Test Line 2"), 0, wx.EXPAND)
self.stats_sizer.Add(wx.StaticText(self.stats_panel, wx.ID_ANY, label="Test Line 3"), 0, wx.EXPAND)
self.stats_sizer.Add(wx.StaticText(self.stats_panel, wx.ID_ANY, label="Test Line 4"), 0, wx.EXPAND)
self.main_sizer.Add(self.stats_panel, 0, flag=wx.EXPAND)
self.main_sizer.AddSpacer(10)
self.main_sizer.Add(wx.StaticLine(self.main_panel, wx.ID_ANY, size=(self.DEF_IMAGE_SIZE + 30, 1)))
self.main_sizer.AddSpacer(1)
self.main_sizer.Fit(self)
self.main_panel.Layout()
if __name__ == "__main__":
wxapp = wx.App()
app = TestApp()
wxapp.MainLoop()