的wxPython 2.8.11.0,蟒蛇2.7wxPython的框架的最小尺寸與面板
如果我把一些Sizer
一些控件直接進入Frame
像
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
自動考慮Panel
的最小尺寸,就像之前的Sizer
一樣?我認爲如果EffectiveMinSize
在另一個控件添加到sizer後發生了改變,會發生什麼情況。
編輯: 顯然
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
上也沒有干預就沒有正確,所以我認爲這是完全不同的問題。
如果您使用的是wxpython> = 3,則首選'wx.Frame.SetMinSize'。 –