wx.StaticBox 的大小参数未被尊重

0 投票
1 回答
987 浏览
提问于 2025-04-16 23:06

我正在尝试创建一个 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 的看法,明确设置窗口大小(用 SetMinSizeSetMaxSize)可能不是个好主意(比如,如果系统的字体大小改变了,内容可能就不再适合你设置的大小限制),但是 StaticText 控件会缩小到内容的大小,并且看起来会把所有东西都一起拉动,除非你明确给它的容器设置大小限制。

我猜在这里你唯一的选择就是在你的框控件上使用 SetMaxSizeSetMinSize,或者尝试其他控件,而不是使用 StaticText。你可以试试 HtmlWindow 作为替代方案。

撰写回答