我无法理解:在sizer.Add中设置了proportion来标识children widget的缩放比例,而wx.EXPAND告诉children展开以占据可用宽度。但是当不将标志设置为 wx.EXPAND 并将比例设置为 1 时,子部件仍然会扩展。
那么这两件事之间的关系/区别是什么?
谢谢
最佳答案
比例特定于 sizer 类型(wx.GridSizer
将创建大小相等的 X*Y 单元格,因此不使用比例)。
对于 wx.BoxSizer
,比例指定元素沿 sizer 的轴 的比例。
将 proportion > 0
的元素添加到 wx.BoxSizer(wx.HORIZONTAL)
将在水平 轴上缩放项目。
proportion=2
的元素将缩放为 proportion=1
的元素大小的两倍。
比例为 0 表示元素不应缩放。
wx.EXPAND
指定元素应该增长以填充沿其他轴 的可用空间。
使用 wx.EXPAND
向 wx.BoxSizer(wx.HORIZONTAL)
添加元素将在垂直 轴上展开项目。
本demo将演示效果:
import wx
class Frame(wx.Frame):
def __init__(self):
wx.Frame.__init__(self, None, title='BoxSizer demo (resize the frame)')
self.SetBackgroundColour(wx.WHITE)
layout = wx.StaticBoxSizer(wx.StaticBox(self,label="wx.BoxSizer(wx.HORIZONTAL)"),wx.HORIZONTAL)
# proportion=1
layout.Add( wx.StaticText(self,label='proportion=1', style=wx.BORDER_DOUBLE ), 1, wx.ALL, 10 )
# proportion=0, expand
layout.Add( wx.StaticText(self,label='wx.EXPAND', style=wx.BORDER_DOUBLE ), 0, wx.EXPAND|wx.ALL, 10 )
# proportion=0, align bottom
layout.Add( wx.StaticText(self,label='wx.ALIGN_BOTTOM', style=wx.BORDER_DOUBLE ), 0, wx.ALIGN_BOTTOM|wx.ALL, 10 )
# proportion=2, expand
layout.Add( wx.StaticText(self,label='proportion=2 + wx.EXPAND', style=wx.BORDER_DOUBLE ), 2, wx.EXPAND|wx.ALL, 10 )
self.SetSizerAndFit(layout)
app = wx.App(False)
Frame().Show()
app.MainLoop()
下一个演示演示了垂直框大小器中的水平框大小器:
import wx
class Frame(wx.Frame):
def __init__(self):
wx.Frame.__init__(self, None, title='BoxSizer demo (resize the frame)')
self.SetBackgroundColour(wx.WHITE)
layout = wx.StaticBoxSizer(wx.StaticBox(self,label="wx.VERTICAL"),wx.VERTICAL)
# row 1
row = wx.wx.StaticBoxSizer(wx.StaticBox(self,label="wx.HORIZONTAL - proportion=0"),wx.HORIZONTAL)
row.Add(wx.StaticText(self,label="proportion=0",style=wx.BORDER_DOUBLE),0, wx.ALL,10)
row.Add(wx.StaticText(self,label="proportion=1",style=wx.BORDER_DOUBLE),1, wx.ALL,10)
layout.Add(row) # add row 1 without arguments
# row 2
row = wx.StaticBoxSizer(wx.StaticBox(self,label="wx.HORIZONTAL - proportion=1"),wx.HORIZONTAL)
row.Add(wx.StaticText(self,label="proportion=1",style=wx.BORDER_DOUBLE),1, wx.ALL,10)
row.Add(wx.StaticText(self,label="proportion=2, wx.EXPAND",style=wx.BORDER_DOUBLE),2, wx.EXPAND|wx.ALL,10)
layout.Add(row,1) # add row 2 with proportion = 1
# row 3
row = wx.StaticBoxSizer(wx.StaticBox(self,label="wx.HORIZONTAL - proportion=0, wx.EXPAND"),wx.HORIZONTAL)
row.Add(wx.StaticText(self,label="proportion=0",style=wx.BORDER_DOUBLE),0, wx.ALL,10)
row.Add(wx.StaticText(self,label="proportion=1",style=wx.BORDER_DOUBLE),1, wx.ALL,10)
layout.Add(row,0,wx.EXPAND) # add row 3 with proportion = 0 and wx.EXPAND
self.SetSizerAndFit(layout)
app = wx.App(False)
Frame().Show()
app.MainLoop()
关于python - wxpython flag=wx.EXPAND vs propotion=number,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14000263/