yak*_*yak 1 python layout wxwidgets wxpython
我有一个带有 wx.Notebook 的简单应用程序,它看起来像这样:

为了布局它的子元素,我使用了 wx.GridBagSizer - 它工作得很好。然而,我遇到了一个小但烦人的问题。当我展开 wx.Notebook 的窗口时,它不会展开所有元素并导致窗口如下所示:
这实际上不是我想要的。我应该如何修改代码以便在调整窗口大小时能够展开所有子元素?干杯:)
我的代码很简单:
import wx
import wx.richtext
class MyFrame(wx.Frame):
def __init__(self):
wx.Frame.__init__(self, None, title='wx.Notebook')
book = wx.Notebook(self)
page = MyPage(parent=book)
book.AddPage(page, 'Page 1')
book.AddPage(MyPage(book),'Page 2')
book.AddPage(MyPage(book),'Page 3')
self.SetSize(wx.Size(320,250))
self.Centre()
class MyPage(wx.Panel):
def __init__(self, parent):
wx.Panel.__init__(self, parent, size=(0,0))
# create sizer to add a border
bagSizer = wx.GridBagSizer(15, 10)
mainSizer = wx.BoxSizer(wx.VERTICAL)
label = wx.StaticText(self, label="Text:")
self.content1 = wx.TextCtrl(self, size=(300, 20))
self.content2 = wx.richtext.RichTextCtrl(self, size=(300, 100), style=wx.TE_MULTILINE)
bagSizer.Add(self.content1, pos=(0, 0), flag=wx.TOP | wx.LEFT | wx.BOTTOM, border=5)
bagSizer.Add(label, pos=(1, 0), flag=wx.TOP | wx.LEFT | wx.BOTTOM, border=5)
bagSizer.Add(self.content2, pos=(2, 0), flag=wx.TOP | wx.LEFT | wx.BOTTOM | wx.EXPAND, border=5)
self.SetSizer(bagSizer)
app = wx.App(False)
MyFrame().Show()
app.MainLoop()
Run Code Online (Sandbox Code Playgroud)
您必须告诉 GridBagSizer 哪些行和列是可增长的。尝试:
bagSizer.AddGrowableRow(2)
bagSizer.AddGrowableCol(0)
self.SetSizer(bagSizer)
Run Code Online (Sandbox Code Playgroud)