wxPython中预定义的sizer
Grid: 一个十分基础的网格布局。当你要放置的窗口部件都是同样的尺寸且整齐地放入一个规则的网格中是使用它。
Flex grid: 对grid sizer稍微做了些改变,当窗口部件有不同的尺寸时,可以有更好的结果。
Grid bag: grid sizer系列中最灵活的成员。使得网格中的窗口部件可以更随意的放置。
Box: 在一条水平或垂直线上的窗口部件的布局。当尺寸改变时,在控制窗口部件的的行为上很灵活。通常用于嵌套的样式。可用于几乎任何类型的布局。
Static box: 一个标准的box sizer。带有标题和环线。
该方法将新的窗口部件、 sizer或空白添加到sizer的列表的开头,这意味所添加的东西将被显示到左上角:
Prepend(window, proportion=0, flag=0, border=0, userData=None)
Prepend(sizer, proportion=0, flag=0, border=0, userData=None)
Prepend(size, proportion=0, flag=0, border=0, userData=None)
Detach()方法
为了从sizer中移除一项,你需要调用Detach()方法,它从sizer中移除项目,但是没有销毁该项目。这对于你以后再使用它是有用的。使用Detach()有三种方法。你可以将你想要移除的窗口、 sizer对象、对象的索引作为参数传递给Detach():
Flex grid: 对grid sizer稍微做了些改变,当窗口部件有不同的尺寸时,可以有更好的结果。
Grid bag: grid sizer系列中最灵活的成员。使得网格中的窗口部件可以更随意的放置。
Box: 在一条水平或垂直线上的窗口部件的布局。当尺寸改变时,在控制窗口部件的的行为上很灵活。通常用于嵌套的样式。可用于几乎任何类型的布局。
Static box: 一个标准的box sizer。带有标题和环线。
使用sizer的三个步骤
·创建并关联sizer到一个容器。 sizer被关联到容器使用wx.Window的
SetSizer(sizer)方法。由于这是一个wx.Window的方法,所以这意味着任何
wxPython窗口部件都可以有一个sizer,尽管sizer只对容器类的窗口部件有意
义。
·添加每个孩子到这个sizer。所有的孩子窗口部件需要被单独添加到该
sizer。仅仅创建使用容器作为父亲的孩子窗口部件是不够的。还要将孩子窗口
部件添加到一个sizer,这个主要的方法是Add()。 Add()方法有一对不同的标
记,我们将在下一节讨论。
·(可选的)使sizer能够计算它的尺寸。告诉sizer去根据它的孩子来计算它
的尺寸,这通过在父窗口对象上调用wx.Window的Fit()方法或该sizer的
Fit(window)方法。(这个窗口方法重定向到sizer方法。)两种情况下,这个
Fit()方法都要求sizer根据它所掌握的它的孩子的情况去计算它的尺寸,并且它
调整父窗口部件到合适的尺寸。还有一个相关的方法: FitInside(),它不改变父
窗口部件的显示尺寸,但是它改变它虚拟尺寸——这意味着如果窗口部件是在
一个可滚动的面板中,那么wxPython会重新计算是否需要滚动条。
SetSizer(sizer)方法。由于这是一个wx.Window的方法,所以这意味着任何
wxPython窗口部件都可以有一个sizer,尽管sizer只对容器类的窗口部件有意
义。
·添加每个孩子到这个sizer。所有的孩子窗口部件需要被单独添加到该
sizer。仅仅创建使用容器作为父亲的孩子窗口部件是不够的。还要将孩子窗口
部件添加到一个sizer,这个主要的方法是Add()。 Add()方法有一对不同的标
记,我们将在下一节讨论。
·(可选的)使sizer能够计算它的尺寸。告诉sizer去根据它的孩子来计算它
的尺寸,这通过在父窗口对象上调用wx.Window的Fit()方法或该sizer的
Fit(window)方法。(这个窗口方法重定向到sizer方法。)两种情况下,这个
Fit()方法都要求sizer根据它所掌握的它的孩子的情况去计算它的尺寸,并且它
调整父窗口部件到合适的尺寸。还有一个相关的方法: FitInside(),它不改变父
窗口部件的显示尺寸,但是它改变它虚拟尺寸——这意味着如果窗口部件是在
一个可滚动的面板中,那么wxPython会重新计算是否需要滚动条。
使用sizer的方法
Add()方法
Add(window, proportion=0, flag=0, border=0, userData=None)
Add(sizer, proportion=0, flag=0, border=0, userData=None)
Add(size, proportion=0, flag=0, border=0, userData=None)
Add(sizer, proportion=0, flag=0, border=0, userData=None)
Add(size, proportion=0, flag=0, border=0, userData=None)
这每一个版本是你最常要用到的,它使你能够将一个窗口部件添加到sizer。
第二个版本用于将一个sizer嵌套在另一个中——这最常用于box sizer,但可用于任何类型的sizer。
第三个版本使你能够添加一个wx.Size对象的空的空白尺寸或一个(宽,高)元组到sizer,通常用作一个分隔符(例如,在一个工具栏中)。另外,这在box sizer中最常使用,但也可在任何sizer中使用以用于形成窗口的一个空白区域或分隔不同的窗口部件。
Prepend()方法
该方法将新的窗口部件、 sizer或空白添加到sizer的列表的开头,这意味所添加的东西将被显示到左上角:
Prepend(window, proportion=0, flag=0, border=0, userData=None)
Prepend(sizer, proportion=0, flag=0, border=0, userData=None)
Prepend(size, proportion=0, flag=0, border=0, userData=None)
Detach()方法
为了从sizer中移除一项,你需要调用Detach()方法,它从sizer中移除项目,但是没有销毁该项目。这对于你以后再使用它是有用的。使用Detach()有三种方法。你可以将你想要移除的窗口、 sizer对象、对象的索引作为参数传递给Detach():
Detach(window)
Detach(sizer)
Detach(index)
在这三种情况中, Detach()方法返回一个布尔值,它表明项目是否真的被删除了 ——如果你试图移除 sizer中没有的项,将返回 false。从 sizer中删除项目,不会自动改变在屏幕上的显示。你需要调用 Layout()方法来执行重绘。你可以得到一个包含了窗口的 sizer的引用,这通过使用 wx.Window的GetContainingSizer()方法。如果该窗口部件没有被包含在 sizer中,那么该方法返回 None。
Detach(sizer)
Detach(index)
在这三种情况中, Detach()方法返回一个布尔值,它表明项目是否真的被删除了 ——如果你试图移除 sizer中没有的项,将返回 false。从 sizer中删除项目,不会自动改变在屏幕上的显示。你需要调用 Layout()方法来执行重绘。你可以得到一个包含了窗口的 sizer的引用,这通过使用 wx.Window的GetContainingSizer()方法。如果该窗口部件没有被包含在 sizer中,那么该方法返回 None。
GetSize()和 GetPosition()来得到 sizer的当前尺寸和位置
sizer是管理它的孩子的尺寸和对齐
当一个新的项目被添加到一个 sizer时, sizer就使用这个项目的初始尺寸或根据它的布局计算给出恰当的尺寸(如果它的初始尺寸没有设置)。换句话说, sizer不调整一个项目的大小,除非要求,这通常发生在一个窗口尺寸的改变时。当 sizer的父窗口部件改变了尺寸时, sizer需要改变它的组分的尺寸。默认情况下, sizer保持这些窗口部件的对齐方式不变。当你添加一个窗口部件到 sizer时,可以通过给 flag参数一个特定值来调整该窗口部件的尺寸改变行为。
sizer是管理它的孩子的尺寸和对齐
当一个新的项目被添加到一个 sizer时, sizer就使用这个项目的初始尺寸或根据它的布局计算给出恰当的尺寸(如果它的初始尺寸没有设置)。换句话说, sizer不调整一个项目的大小,除非要求,这通常发生在一个窗口尺寸的改变时。当 sizer的父窗口部件改变了尺寸时, sizer需要改变它的组分的尺寸。默认情况下, sizer保持这些窗口部件的对齐方式不变。当你添加一个窗口部件到 sizer时,可以通过给 flag参数一个特定值来调整该窗口部件的尺寸改变行为。参数详解
proportion仅被box sizer使用,并当父窗口尺寸改变时影响一个项目如何被绘制。
flag参数用于放置位标记,它控制对齐、边框和调整尺寸。如果在flag参数中指定了边框,那么border参数包含边框的宽度。显示与尺寸调整和对齐相关的flag。
wx.ALIGN_BOTTOM: 按照窗口部件被分配的空间(格子)的底部对齐。
wx.ALIGN_CENTER: 放置窗口部件,使窗口部件的中心处于其所分配的空间的中心。
wx.ALIGN_CENTER_HORIZONTAL: 在它所处的格子中,水平居中。
wx.ALIGN_CENTER_VERTICAL : 在它所处的格子中,垂直居中。
wx.ALIGN_LEFT: 靠着它所处的格子左边缘。这是默认行为。
wx.ALIGN_TOP: 靠着它所处的格子的上边缘。这是默认的行为。
wx.EXPAND: 填满它所处的格子空间。
wx.FIXED_MINSIZE: 保持固定项的最小尺寸。
wx.GROW: 与 wx.EXPAND相同。但比之少两个字符,节约了时间。
wx.SHAPED: 窗口部件的尺寸改变时,只在一个方向上填满格子,另一个方向上按窗口部件原先的形状尺寸的比列填充。
wx.ALIGN_CENTER: 放置窗口部件,使窗口部件的中心处于其所分配的空间的中心。
wx.ALIGN_CENTER_HORIZONTAL: 在它所处的格子中,水平居中。
wx.ALIGN_CENTER_VERTICAL : 在它所处的格子中,垂直居中。
wx.ALIGN_LEFT: 靠着它所处的格子左边缘。这是默认行为。
wx.ALIGN_TOP: 靠着它所处的格子的上边缘。这是默认的行为。
wx.EXPAND: 填满它所处的格子空间。
wx.FIXED_MINSIZE: 保持固定项的最小尺寸。
wx.GROW: 与 wx.EXPAND相同。但比之少两个字符,节约了时间。
wx.SHAPED: 窗口部件的尺寸改变时,只在一个方向上填满格子,另一个方向上按窗口部件原先的形状尺寸的比列填充。
box sizer
构造函数
wx.BoxSizer(orient)
参数orient代表该sizer的方向,它的取值可以是wx.VERTICAL或wx.HORIZONTAL。
参数orient代表该sizer的方向,它的取值可以是wx.VERTICAL或wx.HORIZONTAL。
proportion参数只适用于当sizer沿主方向伸缩时,而wx.EXPAND标记仅适用于当sizer的尺寸在次方向上变化时。换句话说,当一个垂直的box sizer被垂直地绘制时,传递给每个Add()方法调用的参数proportion决定了每个项目将如何垂直地伸缩。除了影响sizer和它的项目的水平增长外,参数proportion以同样的方式影响水平的box sizer。在另一方面,次方向的增长是由对项目所使用的wx.EXPAND标记来控制的,所以,在一个垂直的box sizer中的项目将只在水平方向增长,如果它们设置了wx.EXPAND标记的话,否则这些项目保持它们的最小或最合适的尺寸。