我试图在一个水平BoxSizer
中堆叠多个小部件。但是,我有点意想不到的行为。大小调整器中的项目不是均匀地调整大小,而是在达到某个大小后,项目将随着窗口停止调整大小。在
我想这是最好的视觉理解。所以,在gif格式中:
当前行为:
如果您注意到的话,这两个TextCtrl
会同步调整大小,直到接近中间标记,此时它们都停止调整大小,而是“推”到窗口下方。在
期望行为:
理想的行为是,即使是最小的尺寸,这两个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
子类中完成。我创建按钮,将每个按钮添加到水平BoxSizer
,最后将水平大小调整器添加到垂直容器中。在
有人能找出为什么sizer中的小部件没有正确调整大小吗?在
将textcrls minsize设置为零,这样它们就可以比默认的minsize小。在
相关问题 更多 >
编程相关推荐