wxPython: вторая строка в FlexGridSizer не видна в Ubuntu 16.04 - PullRequest
0 голосов
/ 01 июня 2018

Еще одна одиссея с графическим интерфейсом wxPython, и снова я, похоже, застрял с проблемой, связанной с минимальным рабочим примером, который вы можете найти ниже:

В macOS Sierra 10.12.6 (версия wxPython: 4.0.0b2) я могусм. вторую строку («Text2_fixed Text2_grow») в FlexGridSizer, как только я использую sizer.SetSizeHints (static_box1): отображение в macOS

в Ubuntu 16.04 (версия wxPython: 4.0.0a2)) Я не вижу вторую строку («Text2_fixed Text2_grow»): отображение в 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()

Спасибо за вашу помощь!

1 Ответ

0 голосов
/ 02 июня 2018

Поскольку вы создаете фрейм с фиксированным размером, после создания виджетов и сортировщиков не может быть другого события EVT_SIZE.Поскольку в обработчике EVT_SIZE по умолчанию запускается sizer для создания своего макета, это означает, что первоначальный макет виджетов не будет.Они просто останутся с их размерами и местоположениями по умолчанию.

Простой способ обойти эту проблему для вас.Просто добавьте вызов к frame.SendSizeEvent после того, как все будет создано и установлено, чтобы получить дополнительное событие, чтобы тестировщики могли сделать свой макет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...