wxPython:FlexGridSizer 中的第二行在 Ubuntu 16.04 上不可见
wxPython: Second Row in FlexGridSizer not visible on Ubuntu 16.04
又一次 wxPython GUI 奥德赛,我似乎再次陷入了最小工作示例所暴露的问题,您可以在下面找到:
在 macOS Sierra 10.12.6(wxPython 版本:4.0.0b2)上,我一使用 sizer.SetSizeHints(static_box1):
display on macOS
在 Ubuntu 16.04(wxPython 版本:4.0.0a2)上我看不到第二行("Text2_fixed Text2_grow"):
display on Ubuntu
有谁知道如何使第二行在两种环境中都可见?
这是最小的工作示例:
import wx.lib.inspection
app = wx.App()
frame = wx.Frame(None, title="Top Level Frame", name="Top Level Frame", size=(400, 200))
box_sizer = wx.BoxSizer(wx.VERTICAL)
static_box1 = wx.StaticBox(frame, label='Static Box 1', name='Static Box 1', style=0)
static_box1.SetBackgroundColour(wx.Colour(255, 0, 0, 255))
static_box2 = wx.StaticBox(frame, label='Static Box 2', name='Static Box 2', style=0)
static_box2.SetBackgroundColour(wx.Colour(0, 255, 0, 255))
box_sizer.Add(static_box1, flag=wx.EXPAND)
box_sizer.Add(static_box2, flag=wx.EXPAND)
flex_grid_sizer = wx.FlexGridSizer(2, 2, 0, 0)
flex_grid_sizer.AddGrowableCol(1)
flex_grid_sizer.Add(wx.StaticText(static_box1, label='Text1_fixed', name='Text1_fixed', style=0),
flag=wx.ALIGN_CENTER_VERTICAL | wx.ALL, border=0)
flex_grid_sizer.Add(wx.StaticText(static_box1, label='Text1_grow', name='Text1_grow', style=0),
flag=wx.ALIGN_CENTER_VERTICAL | wx.ALL, border=0)
flex_grid_sizer.Add(wx.StaticText(static_box1, label='Text2_fixed', name='Text2_fixed', style=0),
flag=wx.ALIGN_CENTER_VERTICAL | wx.ALL, border=0)
flex_grid_sizer.Add(wx.StaticText(static_box1, label='Text2_grow', name='Text2_grow', style=0),
flag=wx.ALIGN_CENTER_VERTICAL | wx.ALL, border=0)
#SetSizeHints fixes the problem on macOS, but not on Ubuntu
flex_grid_sizer.SetSizeHints(static_box1)
static_box1.SetSizer(flex_grid_sizer)
frame.SetSizer(box_sizer)
frame.Center()
frame.Show()
wx.lib.inspection.InspectionTool().Show()
app.MainLoop()
感谢您的帮助!
由于您正在创建具有固定大小的框架,因此在创建小部件和大小调整器之后可能不会有另一个 EVT_SIZE
事件。由于默认的 EVT_SIZE
处理程序是触发 sizer 进行布局的地方,这意味着不会有小部件的初始布局。它们将保持默认大小和位置。
一个简单的解决方法将为您解决这个问题。在创建和设置所有内容后,只需添加对 frame.SendSizeEvent
的调用,即可获得额外事件,以便 sizer 能够进行布局。
又一次 wxPython GUI 奥德赛,我似乎再次陷入了最小工作示例所暴露的问题,您可以在下面找到:
在 macOS Sierra 10.12.6(wxPython 版本:4.0.0b2)上,我一使用 sizer.SetSizeHints(static_box1): display on macOS
在 Ubuntu 16.04(wxPython 版本:4.0.0a2)上我看不到第二行("Text2_fixed Text2_grow"): display on Ubuntu
有谁知道如何使第二行在两种环境中都可见?
这是最小的工作示例:
import wx.lib.inspection
app = wx.App()
frame = wx.Frame(None, title="Top Level Frame", name="Top Level Frame", size=(400, 200))
box_sizer = wx.BoxSizer(wx.VERTICAL)
static_box1 = wx.StaticBox(frame, label='Static Box 1', name='Static Box 1', style=0)
static_box1.SetBackgroundColour(wx.Colour(255, 0, 0, 255))
static_box2 = wx.StaticBox(frame, label='Static Box 2', name='Static Box 2', style=0)
static_box2.SetBackgroundColour(wx.Colour(0, 255, 0, 255))
box_sizer.Add(static_box1, flag=wx.EXPAND)
box_sizer.Add(static_box2, flag=wx.EXPAND)
flex_grid_sizer = wx.FlexGridSizer(2, 2, 0, 0)
flex_grid_sizer.AddGrowableCol(1)
flex_grid_sizer.Add(wx.StaticText(static_box1, label='Text1_fixed', name='Text1_fixed', style=0),
flag=wx.ALIGN_CENTER_VERTICAL | wx.ALL, border=0)
flex_grid_sizer.Add(wx.StaticText(static_box1, label='Text1_grow', name='Text1_grow', style=0),
flag=wx.ALIGN_CENTER_VERTICAL | wx.ALL, border=0)
flex_grid_sizer.Add(wx.StaticText(static_box1, label='Text2_fixed', name='Text2_fixed', style=0),
flag=wx.ALIGN_CENTER_VERTICAL | wx.ALL, border=0)
flex_grid_sizer.Add(wx.StaticText(static_box1, label='Text2_grow', name='Text2_grow', style=0),
flag=wx.ALIGN_CENTER_VERTICAL | wx.ALL, border=0)
#SetSizeHints fixes the problem on macOS, but not on Ubuntu
flex_grid_sizer.SetSizeHints(static_box1)
static_box1.SetSizer(flex_grid_sizer)
frame.SetSizer(box_sizer)
frame.Center()
frame.Show()
wx.lib.inspection.InspectionTool().Show()
app.MainLoop()
感谢您的帮助!
由于您正在创建具有固定大小的框架,因此在创建小部件和大小调整器之后可能不会有另一个 EVT_SIZE
事件。由于默认的 EVT_SIZE
处理程序是触发 sizer 进行布局的地方,这意味着不会有小部件的初始布局。它们将保持默认大小和位置。
一个简单的解决方法将为您解决这个问题。在创建和设置所有内容后,只需添加对 frame.SendSizeEvent
的调用,即可获得额外事件,以便 sizer 能够进行布局。