wxpython 2.8.11.0,python 2.7
如果我把一些Sizer
带有一些控件的东西直接放入一个Frame
like
import wx
app=wx.App()
frm = wx.Frame(None, title='title')
sizer = wx.BoxSizer(wx.HORIZONTAL)
sizer.Add(wx.SpinCtrl(frm))
sizer.Add(wx.SpinCtrl(frm))
frm.SetSizerAndFit(sizer)
frm.Show()
app.MainLoop()
将Frame
自动具有正确的最小大小来包含Sizer
并且不可能使其更小。如果中间有一个Panel
(根据需要在控件之间切换)这不起作用,则可以使窗口太小。
import wx
app=wx.App()
frm = wx.Frame(None, title='title')
pan = wx.Panel(frm)
sizer = wx.BoxSizer(wx.HORIZONTAL)
sizer.Add(wx.SpinCtrl(pan))
sizer.Add(wx.SpinCtrl(pan))
pan.SetSizerAndFit(sizer)
frm.Show()
app.MainLoop()
此外frm.Fit()
并且frm.SetMinSize(frm.GetEffectiveMinSize())
需要获得相同的行为。完整代码:
import wx
app=wx.App()
frm = wx.Frame(None, title='title')
pan = wx.Panel(frm)
sizer = wx.BoxSizer(wx.HORIZONTAL)
sizer.Add(wx.SpinCtrl(pan))
sizer.Add(wx.SpinCtrl(pan))
pan.SetSizerAndFit(sizer)
frm.Fit()
frm.SetMinSize(frm.GetEffectiveMinSize())
frm.Show()
app.MainLoop()
我可以接受frm.Fit()
,但我不喜欢frm.SetMinSize(frm.GetEffectiveMinSize())
。没有更好的解决方案,以便自动考虑与之前一样Frame
的最小尺寸吗?我正在考虑如果在将另一个控件添加到 sizer 之后发生的更改会发生什么。Panel
Sizer
EffectiveMinSize
编辑: 显然
panel.SetSizerAndFit(sizer)
frm.Fit()
frm.SetMinSize(frm.GetEffectiveMinSize())
应该替换为
panel.SetSizer(sizer)
sizer.SetSizeHints(frm)
看起来更干净一些。所以总的来说这看起来像
import wx
app=wx.App()
frm = wx.Frame(None, title='title')
pan = wx.Panel(frm)
sizer = wx.BoxSizer(wx.HORIZONTAL)
sizer.Add(wx.SpinCtrl(pan))
sizer.Add(wx.SpinCtrl(pan))
pan.SetSizer(sizer)
sizer.SetSizeHints(frm)
frm.Show()
app.MainLoop()
这是执行此操作的首选方法吗?
如果稍后添加小部件,即使第一种方法Sizer
直接在Frame
没有干预的情况下也无法正确处理,所以我认为这是一个完全不同的问题。