Не растягивается контрол wxPython

Собрал небольшой пример на базе Notebook и WebView с использованием BoxSizer(VERTICAL). Ожидал, что WebView будет растягиваться на всю высоту окна, но этого не случилось.

import wx
import wx.html2


class BrowserPage(wx.Panel):
    """
    docstring
    """
    def __init__(self, parent):
        wx.Panel.__init__(self, parent=parent)
        sizer = wx.BoxSizer(wx.VERTICAL)
        self.browser = wx.html2.WebView.New(self)
        sizer.Add(self.browser, 0, wx.EXPAND, 0)
        self.SetSizer(sizer)


class MainNotebook(wx.Notebook):
    def __init__(self, parent):
        wx.Notebook.__init__(self, parent=parent)
        self.browser_page = BrowserPage(self)
        self.AddPage(self.browser_page, 'Просмотр')
        self.BackgroundColour = "blue"


class MainPanel(wx.Panel):
    """
    Панель главного окна
    """
    def __init__(self, parent):
        wx.Panel.__init__(self, parent=parent)
        self.notebook = MainNotebook(self)
        sizer = wx.BoxSizer(wx.VERTICAL)
        sizer.Add(self.notebook, 0, wx.ALL | wx.EXPAND , 5)
        self.SetSizer(sizer)
        

class MainFrame(wx.Frame):
    """
    Фрейм главного окна
    """
    def __init__(self):
        """
        конструктор
        """
        wx.Frame.__init__(
            self, None, wx.ID_ANY,
            "Notebook Tutorial",
            size=(600,400)
        )
        self.panel = MainPanel(self)

        self.Layout()

        self.Show()


if __name__ == "__main__":
    app = wx.App()
    frame = MainFrame()
    app.MainLoop()

введите сюда описание изображения

Для сравнения - учебный пример по Notebook, который встречается в сети. Собственно, код выше был переделан из него.

import wx
import random

class TabPanel(wx.Panel):
    """
    Класс панели для получения вкладок Блокнота
    """

    def __init__(self, parent):
        """"""
        wx.Panel.__init__(self, parent=parent)

        colors = ["red", "blue", "gray", "yellow", "green"]
        self.SetBackgroundColour(random.choice(colors))

        btn = wx.Button(self, label="Press Me")
        sizer = wx.BoxSizer(wx.VERTICAL)
        sizer.Add(btn, 0, wx.ALL, 10)
        self.SetSizer(sizer)


class DemoNotebook(wx.Notebook):
    """
    Класс нашего блокнота
    """

    def __init__(self, parent):
        wx.Notebook.__init__(self, parent)

        tabOne = TabPanel(self)
        self.AddPage(tabOne, "Tab 1")

        tabTwo = TabPanel(self)
        self.AddPage(tabTwo, "Tab 2")


class DemoPanel(wx.Panel):
    """
    Главная панель, использующаяся рамкой
    """

    def __init__(self, parent):
        """"""
        wx.Panel.__init__(self, parent=parent)

        notebook = DemoNotebook(self)

        sizer = wx.BoxSizer(wx.VERTICAL)
        sizer.Add(notebook, 1, wx.ALL|wx.EXPAND, 5)
        self.SetSizer(sizer)


class DemoFrame(wx.Frame):
    """
    Рамка, которая содержит все виджеты
    """

    def __init__(self):
        """Constructor"""
        wx.Frame.__init__(
            self, None, wx.ID_ANY,
            "Notebook Tutorial",
            size=(600,400)
        )
        panel = DemoPanel(self)

        self.Layout()

        self.Show()


if __name__ == "__main__":
    app = wx.App()
    frame = DemoFrame()
    app.MainLoop()

И здесь прекрасно видно, что панель с кнопкой прекрасно растягивается.

введите сюда описание изображения

Вопрос: почему в моем коде не происходит растягивание кантрола, в отличие от базового примера?


Ответы (1 шт):

Автор решения: ioprst

Передавайте в wx.BoxSizer.Add proportion=1. Так как у вас всего один элемент в сайзере, то он займет все доступное место.

class BrowserPage(wx.Panel):
"""
docstring
"""

def __init__(self, parent):
    wx.Panel.__init__(self, parent=parent)
    sizer = wx.BoxSizer(wx.VERTICAL)
    self.browser = wx.html2.WebView.New(self)
    sizer.Add(self.browser, 1, wx.EXPAND, 0)
    self.SetSizer(sizer)

...

class MainPanel(wx.Panel):
"""
Панель главного окна
"""

def __init__(self, parent):
    wx.Panel.__init__(self, parent=parent)
    self.notebook = MainNotebook(self)
    sizer = wx.BoxSizer(wx.VERTICAL)
    sizer.Add(self.notebook, 1, wx.ALL | wx.EXPAND, 5)
    self.SetSizer(sizer)

...

введите сюда описание изображения

→ Ссылка