wx.StaticBox 的大小参数未被尊重
我正在尝试创建一个 wx.StaticBox
,希望它的大小是固定的,不管里面的控件大小如何。所以我有一个面板,里面包含了以下代码:
box = wx.StaticBox(self, -1, 'BoxTitle', size=(200, 200))
bsizer = wx.StaticBoxSizer(box, wx.VERTICAL)
text = wx.StaticText(self, -1, 'Text')
bsizer.Add(text)
border = wx.BoxSizer()
border.Add(bsizer)
self.SetSizer(border)
但是,这个框只是包裹住了里面的 StaticText
控件,并没有保持我指定的200x200的大小。我该怎么做才能让这个框保持一个固定的大小呢?
1 个回答
1
如果你在创建了你的 StaticBox
后加上以下代码,它会强制设置大小:
box.SetMaxSize((200,200))
需要注意的是,StaticText
这个框不会自动换行,所以如果你的文字比 StaticBox
宽,它就会超出框的边界(至少在 OS X 系统上是这样的,Windows 上可能表现不同)。
更新:
在 Windows 上,大小的表现方式完全不同——StaticBox
会根据文字的大小自动缩小。
虽然我同意 bogdan 的看法,明确设置窗口大小(用 SetMinSize
或 SetMaxSize
)可能不是个好主意(比如,如果系统的字体大小改变了,内容可能就不再适合你设置的大小限制),但是 StaticText
控件会缩小到内容的大小,并且看起来会把所有东西都一起拉动,除非你明确给它的容器设置大小限制。
我猜在这里你唯一的选择就是在你的框控件上使用 SetMaxSize
或 SetMinSize
,或者尝试其他控件,而不是使用 StaticText
。你可以试试 HtmlWindow
作为替代方案。