Не растягивается контрол 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)
...


