Размещение элементов (панелей) внутри wx.GridBagSizer - PullRequest
6 голосов
/ 15 января 2011

Я использую gridbagsizer для размещения двух панелей внутри фрейма.

control_panel = wx.Panel(self, id=ID_CONTROL_PANEL)
main_panel = wx.Panel(self, id=ID_MAIN_PANEL)

frame_sizer = wx.GridBagSizer(1, 1)
frame_sizer.Add(control_panel, (0, 0), (2, 5), flag=wx.EXPAND)
frame_sizer.Add(main_panel, (2, 0), (5, 5), flag=wx.EXPAND)
frame_sizer.AddGrowableRow(0)
frame_sizer.AddGrowableCol(0)
self.SetSizer(frame_sizer)

Я хочу, чтобы control_panel была выше main_panel (как вы можете видеть выше).Тем не менее, это вывод, который я получаю:

alt text

Я не знаю, почему верхняя панель намного больше, чем нижняя, когда я указал противоположное.(2, 5) для верхней и (5, 5) для нижней.Он также имеет странное поведение, когда я изменяю его размер, он в основном дает мне то, что я хочу (см. Изображение ниже), но я не знаю, как сохранить соотношение, когда я снова увеличу его.

alt text

Однако, когда вы начинаете изменять размер больше (даже на небольшую величину), вы можете видеть (ниже), что формы и пропорции резко меняются в другом направлении (нижняя часть становится намного меньше, а верхняя намного больше).

alt text

Все еще пытаюсь изучить этот классификатор и не могу найти эту проблему ни с одним из примеров, которые я видел.Также попробовал поэкспериментировать со всеми параметрами и сделать несколько тестов, и я не могу понять, что здесь происходит.Любая помощь будет высоко ценится.

РЕДАКТИРОВАТЬ: Изображение ниже добавлено, чтобы помочь комментарий ниже.alt text

Ответы [ 2 ]

2 голосов
/ 25 января 2011

Лично я бы использовал BoxSizer в вертикальной ориентации. Вот простой пример:

import wx

class MyForm(wx.Frame):

    def __init__(self):
        wx.Frame.__init__(self, None, wx.ID_ANY, "Tutorial")

        # Add a panel so it looks the correct on all platforms
        panel = wx.Panel(self, wx.ID_ANY)

        control_panel = wx.Panel(panel)
        control_panel.SetBackgroundColour("Yellow")
        main_panel = wx.Panel(panel)
        main_panel.SetBackgroundColour("Blue")

        sizer = wx.BoxSizer(wx.VERTICAL)
        sizer.Add(control_panel, 3, wx.EXPAND)
        sizer.Add(main_panel, 1, wx.EXPAND)
        panel.SetSizer(sizer)

# Run the program
if __name__ == "__main__":
    app = wx.PySimpleApp()
    frame = MyForm().Show()
    app.MainLoop()

Я изменил цвет фона каждой панели, чтобы было легче определить, что есть что. Обратите внимание, что я дал панели управления пропорцию 3, а главной панели - пропорцию 1. Возможно, вы захотите взглянуть на инструмент проверки виджетов, чтобы помочь вам его визуализировать:

http://wiki.wxpython.org/Widget%20Inspection%20Tool

1 голос
/ 15 января 2011

Из семи строк и пяти столбцов в сетке вы указали только первую строку и первый столбец, который можно расширять.

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

Флаг wx.EXPAND действует только в том случае, если ячейка находится в растущей строке или столбце.

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