68 lines
3.7 KiB
Markdown
68 lines
3.7 KiB
Markdown
|
|
# wxPython:用 WrapSizer 包装小部件
|
|||
|
|
|
|||
|
|
> 原文:<https://www.blog.pythonlibrary.org/2014/01/22/wxpython-wrap-widgets-with-wrapsizer/>
|
|||
|
|
|
|||
|
|
wxPython 2.9 向世界介绍了一种新型的 sizer,它可以在您调整框架大小时自动让小部件“环绕”。这种尺码仪被称为 **wx。包装尺寸器**。由于某种原因,它相对来说不太为人所知,所以在本文中,我们将花几分钟来讨论如何使用它。
|
|||
|
|
|
|||
|
|
要跟随本教程,您需要安装 wxPython 2.9 或更高版本。一旦你明白了,我们就可以继续了。
|
|||
|
|
|
|||
|
|
### 使用包装尺寸
|
|||
|
|
|
|||
|
|
[](https://www.blog.pythonlibrary.org/wp-content/uploads/2014/01/wxWrapSizerDemo.png)
|
|||
|
|
|
|||
|
|
**wx。WrapSizer** 小部件的工作方式与 **wx 非常相似。BoxSizer** 。要使用它,您需要做的就是实例化它并向它添加小部件。让我们来看一个简单的程序:
|
|||
|
|
|
|||
|
|
```py
|
|||
|
|
|
|||
|
|
import random
|
|||
|
|
import wx
|
|||
|
|
from wx.lib.buttons import GenButton
|
|||
|
|
|
|||
|
|
########################################################################
|
|||
|
|
class MyPanel(wx.Panel):
|
|||
|
|
""""""
|
|||
|
|
|
|||
|
|
#----------------------------------------------------------------------
|
|||
|
|
def __init__(self, parent):
|
|||
|
|
"""Constructor"""
|
|||
|
|
wx.Panel.__init__(self, parent)
|
|||
|
|
|
|||
|
|
text = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
|
|||
|
|
sizer = wx.WrapSizer()
|
|||
|
|
for letter in text:
|
|||
|
|
btn = GenButton(self, label=letter)
|
|||
|
|
r = random.randint(128, 255)
|
|||
|
|
g = random.randint(128, 255)
|
|||
|
|
b = random.randint(128, 255)
|
|||
|
|
btn.SetBackgroundColour(wx.Colour(r,g,b))
|
|||
|
|
btn.Refresh()
|
|||
|
|
sizer.Add(btn, 0, wx.ALL, 5)
|
|||
|
|
|
|||
|
|
self.SetSizer(sizer)
|
|||
|
|
|
|||
|
|
########################################################################
|
|||
|
|
class MyFrame(wx.Frame):
|
|||
|
|
""""""
|
|||
|
|
|
|||
|
|
#----------------------------------------------------------------------
|
|||
|
|
def __init__(self):
|
|||
|
|
"""Constructor"""
|
|||
|
|
wx.Frame.__init__(self, None, title="WrapSizers", size=(400,500))
|
|||
|
|
panel = MyPanel(self)
|
|||
|
|
self.Show()
|
|||
|
|
|
|||
|
|
#----------------------------------------------------------------------
|
|||
|
|
if __name__ == "__main__":
|
|||
|
|
app = wx.App(False)
|
|||
|
|
frame = MyFrame()
|
|||
|
|
app.MainLoop()
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
这里我们创建一个 sizer 的实例,然后遍历字母表中的字母,为每个字母创建一个按钮。我们还改变了每个按钮的背景颜色,增加了一点变化。如果您还没有猜到,这个例子是基于 wxPython 演示例子的。您会注意到,当您调整框架大小时,按钮会尽可能地重新排列。有时,它们甚至会改变一点大小。让我们了解更多关于这个 sizer 的信息!
|
|||
|
|
|
|||
|
|
wx。WrapSizer 可以被告知它的方向,您可以在实例化时向它传递标志。方向标志是 wx。水平和 wx.VERTICAL。默认为水平。根据[文档](http://wxpython.org/Phoenix/docs/html/WrapSizer.html)“flags 参数可以是值 EXTEND_LAST_ON_EACH_LINE 和 REMOVE_LEADING_SPACES 的组合,EXTEND _ LAST _ ON _ EACH _ LINE 将导致每一行的最后一项使用该行的任何剩余空间,REMOVE _ LEADING _ SPACES 将从行的开头删除任何间隔元素。”除了普通的 wx 之外,WrapSizer 还有四个附加方法。Sizer 方法: **CalcMin** (计算最小尺寸)、 **InformFirstDirection** (似乎不被使用)、 **IsSpaceItem** (可用于将一些普通项目作为间隔符处理)和**recalcasesizes**(实现计算一个 box sizer 的尺寸,然后设置其子元素的尺寸)。
|
|||
|
|
|
|||
|
|
这就包含了这个小部件的所有信息。希望您能在自己的项目中发现这个相对未知的 sizer 的许多好用途。
|
|||
|
|
|
|||
|
|
*注意:这段代码是在 Windows 7 上使用 wxPython 2.9.3 (classic)和 Python 2.7.3 测试的。*
|