wxpython 2.8.11.0,python 2.7
如果我把一些Sizer带有一些控件的东西直接放入一个Framelike
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 之后发生的更改会发生什么。PanelSizerEffectiveMinSize
编辑: 显然
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没有干预的情况下也无法正确处理,所以我认为这是一个完全不同的问题。