wxpython 2.8.11.0、python 2.7
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
編集: どうやら
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