サイザーでコントロールを配置したウィンドウの大きさを(自動?)調整する
サイザーを使ってウィンドウ上にコントロールを並べているのだが、どうも思うように配置ができない。色々と試行錯誤中であるのだが、デモの中で見たことのないテクニックを発見した(単に自分が勉強不足なだけだが)。
demo/ExpandoTextCtrl.pyの中で、パネルオブジェクトをサイザーの中に入れている。以下、抜粋。
#Put the panel in a sizer for the frame so we can use self.Fit() frameSizer = wx.BoxSizer() frameSizer.Add(p, 1, wx.EXPAND) self.SetSizer(frameSizer) self.Fit()
自分のコードの中でも試してみたが、パネルオブジェクトをサイザーに入れてもうまく動作しない。なので、この部分で何をやっているのかはひとまず置いておいて、初見のself.Fit()に注目した。Fit()だけ、試験的に使ってみた。以下、テストコード。
import wx class MyApp(wx.PySimpleApp): def OnInit(self): Frm = wx.Frame(None, -1, "wxPython") TxtCtr1 = wx.TextCtrl(Frm, -1, "Sentence...") Btn1 = wx.Button(Frm, -1, "Button 1") BxSz = wx.BoxSizer() BxSz.Add(TxtCtr1, 0, wx.EXPAND|wx.ALL, 20) BxSz.Add(Btn1, 0, wx.EXPAND|wx.ALL, 20) Frm.SetSizer(BxSz) Frm.Show() Frm.Fit() return True app = MyApp() app.MainLoop()
その結果、Frm.Fit()を加えると、ウィンドウの大きさが自動調整されるようだ。実行結果の写真を載せておく。
Fitメソッドって役に立つかもしれない。