【发布时间】:2014-11-02 20:59:22
【问题描述】:
我正在尝试在水平BoxSizer 中堆叠多个小部件。但是,我得到了一些意想不到的行为。而不是 Sizer 中的项目均匀调整大小,一旦达到特定大小,项目将与窗口一起停止调整大小。
我认为这是最好的视觉理解。所以,以 gif 格式:
当前行为:
如果您注意到的话,两个TextCtrls 会同步调整大小,直到大约中间标记,此时它们都停止调整大小,而是被“推”到窗口下方。
期望的行为:
期望的行为是,即使在最小的尺寸下,两个TextCtrl仍然会被平均分割(以上是通过photoshop实现的)
对于仅显示的两个小部件,这并不是一个真正的大问题,因为在弹出不均匀的TextCtrl 问题之前,可以将窗口的大小调整为比任何用户都小。然而!在实际应用中,我需要将其中的 3-5 个(由各种小部件类型组成)彼此相邻堆叠。虽然两个不是问题,但添加更多(尤其是添加空间和填充时)很快会使问题更加明显。
完整代码:
import wx
from wx.lib.scrolledpanel import ScrolledPanel
class TestPanel(ScrolledPanel):
def __init__(self, parent):
ScrolledPanel.__init__(self, parent)
self.SetupScrolling(scroll_x=False)
self.textctrls = [wx.TextCtrl(self) for _ in range(4)]
sizer = wx.BoxSizer(wx.VERTICAL)
hsizer = wx.BoxSizer(wx.HORIZONTAL)
for textctrl in self.textctrls:
hsizer.Add(textctrl, 1, wx.EXPAND)
sizer.Add(hsizer, 0, wx.EXPAND)
self.SetSizer(sizer)
class MyFrame(wx.Frame):
def __init__(self, parent):
wx.Frame.__init__(self, parent, title="test", size=(320, 240))
self.SetBackgroundColour('#ffffff')
self.panel = TestPanel(self)
self.Show()
if __name__ == '__main__':
app = wx.App(False)
MyFrame(None)
app.MainLoop()
代码应该相对简单。所有繁重的列表都在ScrolledPanel 子类中完成。我创建按钮,将每个按钮添加到 Horizontal BoxSizer,最后将 Horizontal sizer 添加到垂直容器中。
谁能确定为什么 sizer 中的小部件没有正确调整大小?
【问题讨论】: