python - wxpython flag=wx.EXPAND vs propotion=number

标签 python wxpython

我无法理解:在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.EXPANDwx.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/

相关文章:

python - 通过容器 Python 拆分字符串

Python OpenCV SVM 实现

python - 执行 python 脚本并在 WXPython GUI 中显示进度

python - wxformbuilder python 生成的代码抛出 NameError

python - 如何在用户单击框架的关闭时终止 WxPython 应用程序

python - 如何在 wx.Panel 背景上做 dregradê?

python - 从 wx 框架类调用应用程序方法

python - 提取一个单元格的值以另一列的值为条件 - Pandas/Python

python - python 中是否有一个绘图包可以处理缺失值而不省略 x 轴值/标签/比例?

python - 在python中使用正则表达式返回特定单词之间的大写单词