wxPython — 调整静态框大小的 StaticBox Sizer
wxPython — StaticBox Sizer resizing Static Boxes
这是我的代码的一个最小示例,它本身应该 运行 -- 运行 原样,一切都按我想要的方式布置,3 行节点均匀分布:
import wx
def createBoxes():
outVSizer = wx.BoxSizer(wx.VERTICAL)
outHSizer = wx.BoxSizer(wx.HORIZONTAL)
outVSizer.AddStretchSpacer(1)
outHSizer.AddStretchSpacer(1)
sizer = wx.FlexGridSizer(rows=3, cols=3, vgap=35, hgap=20)
box = {}
boxSizer = {}
text = wx.StaticText(panel, wx.ID_ANY, "This is a test")
for i in range(6):
box[i] = wx.StaticBox(panel, wx.ID_ANY, "testBox", size=(0,100))
#boxSizer[i] = wx.StaticBoxSizer(box[i], wx.VERTICAL)
#boxSizer[i].Add(text, proportion = 1, flag=wx.ALIGN_CENTER)
sizer.Add(box[i], flag=wx.EXPAND)
sizer.AddGrowableCol(0,1)
sizer.AddGrowableCol(1,1)
sizer.AddGrowableCol(2,1)
outHSizer.Add(sizer, flag=wx.EXPAND, proportion=15)
outHSizer.AddStretchSpacer(1)
outVSizer.Add(outHSizer, flag=wx.EXPAND, proportion=15)
panel.SetSizer(outVSizer)
app = wx.App()
frame = wx.Frame(None, size=(500,500))
panel = wx.Panel(frame)
createBoxes()
frame.Show()
app.MainLoop()
但是,当我取消注释这两个注释行并将其后的行更改为:
sizer.Add(boxSizer[i], flag=wx.EXPAND)
布局变得狭窄,节点垂直重叠等。我不知道我在这里做错了什么,有没有人有建议?
这是获得某些结果所需的最少更改:
# text = wx.StaticText(panel, wx.ID_ANY, "This is a test")
for i in range(6):
box[i] = wx.StaticBox(panel, wx.ID_ANY, "testBox", size=(0,100))
# change I
text = wx.StaticText(panel, wx.ID_ANY, "This is a test")
boxSizer[i] = wx.StaticBoxSizer(box[i], wx.VERTICAL)
boxSizer[i].Add(text, proportion = 1, flag=wx.ALIGN_CENTER)
# sizer.Add(box[i], flag=wx.EXPAND)
# change II
sizer.Add(boxSizer[i], flag=wx.EXPAND)
您已将 text
添加到六个不同的 sizer(这不是一个好主意)。其次,您必须将 StaticBoxSizer
和 而不是 静态框添加到父 sizer。
下一个问题是sizer
设置了flag=wxEXPAND
,但没有比例。因此它永远不会改变大小。
将文本小部件添加到 6 个不同的 sizer 从来都不是一个好主意。我建议为每个 sizer 创建一个 StaticText
的新实例。重叠的原因是你在使用StaticBoxsizers
的时候需要增加你的vgap
。
这是代码的更新版本:
import wx
def createBoxes():
outVSizer = wx.BoxSizer(wx.VERTICAL)
outHSizer = wx.BoxSizer(wx.HORIZONTAL)
outVSizer.AddStretchSpacer(1)
outHSizer.AddStretchSpacer(1)
sizer = wx.FlexGridSizer(rows=3, cols=3, vgap=55, hgap=20)
box = {}
boxSizer = {}
#text = wx.StaticText(panel, wx.ID_ANY, "This is a test")
for i in range(6):
box[i] = wx.StaticBox(panel, wx.ID_ANY, "testBox", size=(0,100))
text = wx.StaticText(panel, wx.ID_ANY, "This is a test")
boxSizer[i] = wx.StaticBoxSizer(box[i], wx.VERTICAL)
boxSizer[i].Add(text, proportion = 1, flag=wx.ALIGN_CENTER)
sizer.Add(boxSizer[i], flag=wx.EXPAND)
sizer.AddGrowableCol(0,1)
sizer.AddGrowableCol(1,1)
sizer.AddGrowableCol(2,1)
outHSizer.Add(sizer, flag=wx.EXPAND, proportion=15)
outHSizer.AddStretchSpacer(1)
outVSizer.Add(outHSizer, flag=wx.EXPAND, proportion=15)
panel.SetSizer(outVSizer)
app = wx.App()
frame = wx.Frame(None, size=(500,500))
panel = wx.Panel(frame)
createBoxes()
frame.Show()
app.MainLoop()
这是我的代码的一个最小示例,它本身应该 运行 -- 运行 原样,一切都按我想要的方式布置,3 行节点均匀分布:
import wx
def createBoxes():
outVSizer = wx.BoxSizer(wx.VERTICAL)
outHSizer = wx.BoxSizer(wx.HORIZONTAL)
outVSizer.AddStretchSpacer(1)
outHSizer.AddStretchSpacer(1)
sizer = wx.FlexGridSizer(rows=3, cols=3, vgap=35, hgap=20)
box = {}
boxSizer = {}
text = wx.StaticText(panel, wx.ID_ANY, "This is a test")
for i in range(6):
box[i] = wx.StaticBox(panel, wx.ID_ANY, "testBox", size=(0,100))
#boxSizer[i] = wx.StaticBoxSizer(box[i], wx.VERTICAL)
#boxSizer[i].Add(text, proportion = 1, flag=wx.ALIGN_CENTER)
sizer.Add(box[i], flag=wx.EXPAND)
sizer.AddGrowableCol(0,1)
sizer.AddGrowableCol(1,1)
sizer.AddGrowableCol(2,1)
outHSizer.Add(sizer, flag=wx.EXPAND, proportion=15)
outHSizer.AddStretchSpacer(1)
outVSizer.Add(outHSizer, flag=wx.EXPAND, proportion=15)
panel.SetSizer(outVSizer)
app = wx.App()
frame = wx.Frame(None, size=(500,500))
panel = wx.Panel(frame)
createBoxes()
frame.Show()
app.MainLoop()
但是,当我取消注释这两个注释行并将其后的行更改为:
sizer.Add(boxSizer[i], flag=wx.EXPAND)
布局变得狭窄,节点垂直重叠等。我不知道我在这里做错了什么,有没有人有建议?
这是获得某些结果所需的最少更改:
# text = wx.StaticText(panel, wx.ID_ANY, "This is a test")
for i in range(6):
box[i] = wx.StaticBox(panel, wx.ID_ANY, "testBox", size=(0,100))
# change I
text = wx.StaticText(panel, wx.ID_ANY, "This is a test")
boxSizer[i] = wx.StaticBoxSizer(box[i], wx.VERTICAL)
boxSizer[i].Add(text, proportion = 1, flag=wx.ALIGN_CENTER)
# sizer.Add(box[i], flag=wx.EXPAND)
# change II
sizer.Add(boxSizer[i], flag=wx.EXPAND)
您已将 text
添加到六个不同的 sizer(这不是一个好主意)。其次,您必须将 StaticBoxSizer
和 而不是 静态框添加到父 sizer。
下一个问题是sizer
设置了flag=wxEXPAND
,但没有比例。因此它永远不会改变大小。
将文本小部件添加到 6 个不同的 sizer 从来都不是一个好主意。我建议为每个 sizer 创建一个 StaticText
的新实例。重叠的原因是你在使用StaticBoxsizers
的时候需要增加你的vgap
。
这是代码的更新版本:
import wx
def createBoxes():
outVSizer = wx.BoxSizer(wx.VERTICAL)
outHSizer = wx.BoxSizer(wx.HORIZONTAL)
outVSizer.AddStretchSpacer(1)
outHSizer.AddStretchSpacer(1)
sizer = wx.FlexGridSizer(rows=3, cols=3, vgap=55, hgap=20)
box = {}
boxSizer = {}
#text = wx.StaticText(panel, wx.ID_ANY, "This is a test")
for i in range(6):
box[i] = wx.StaticBox(panel, wx.ID_ANY, "testBox", size=(0,100))
text = wx.StaticText(panel, wx.ID_ANY, "This is a test")
boxSizer[i] = wx.StaticBoxSizer(box[i], wx.VERTICAL)
boxSizer[i].Add(text, proportion = 1, flag=wx.ALIGN_CENTER)
sizer.Add(boxSizer[i], flag=wx.EXPAND)
sizer.AddGrowableCol(0,1)
sizer.AddGrowableCol(1,1)
sizer.AddGrowableCol(2,1)
outHSizer.Add(sizer, flag=wx.EXPAND, proportion=15)
outHSizer.AddStretchSpacer(1)
outVSizer.Add(outHSizer, flag=wx.EXPAND, proportion=15)
panel.SetSizer(outVSizer)
app = wx.App()
frame = wx.Frame(None, size=(500,500))
panel = wx.Panel(frame)
createBoxes()
frame.Show()
app.MainLoop()