wxPython:FlexGridSizer中的第二行在Ubuntu 16.04上不可见

wxPython:FlexGridSizer中的第二行在Ubuntu 16.04上不可见,python,user-interface,wxpython,Python,User Interface,Wxpython,然而,另一个wxPython GUI odyssey和我似乎被下面的最小工作示例所暴露的问题困住了: 在macOS Sierra 10.12.6(wxPython版本:4.0.0b2)上,只要我使用sizer.SetSizeHints(静态框1),我就可以看到FlexGridSizer中的第二行(“Text2_fixed Text2_grow”): 在Ubuntu 16.04(wxPython版本:4.0.0a2)上,我看不到第二行(“Text2\u固定Text2\u增长”): 有人知道如何

然而,另一个wxPython GUI odyssey和我似乎被下面的最小工作示例所暴露的问题困住了:

在macOS Sierra 10.12.6(wxPython版本:4.0.0b2)上,只要我使用sizer.SetSizeHints(静态框1),我就可以看到FlexGridSizer中的第二行(“Text2_fixed Text2_grow”):

在Ubuntu 16.04(wxPython版本:4.0.0a2)上,我看不到第二行(“Text2\u固定Text2\u增长”):

有人知道如何使第二行在两种环境中都可见吗

以下是最简单的工作示例:

    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
的调用,即可获得一个额外的事件,以便大小调整者能够进行布局。

感谢您的解决方案建议。不幸的是,它没有解决Ubuntu上的问题,在MacOS上,它的效果是我可以删除flex_grid_sizer.SetSizeHInts()调用。WxPython先生有其他想法/方法吗?非常感谢!它对我有用。通过使用
wx.CallAfter(frame.SendSizeEvent)
稍微延迟对
SendSizeEvent
的调用,您可能会有些运气。您还应该尝试使用比4.0.0a2更新的版本。谢谢,我们将尝试升级!