2011-01-15 9 views
6

グリッドバッジを使用してフレーム内に2つのパネルを配置しています。wx.GridBagSizer内に要素(パネル)を配置する

control_panel = wx.Panel(self, id=ID_CONTROL_PANEL) 
main_panel = wx.Panel(self, id=ID_MAIN_PANEL) 

frame_sizer = wx.GridBagSizer(1, 1) 
frame_sizer.Add(control_panel, (0, 0), (2, 5), flag=wx.EXPAND) 
frame_sizer.Add(main_panel, (2, 0), (5, 5), flag=wx.EXPAND) 
frame_sizer.AddGrowableRow(0) 
frame_sizer.AddGrowableCol(0) 
self.SetSizer(frame_sizer) 

私はcontrol_panelをmain_panelよりも上にしたいと思います(上記のように)。しかし、これは私が手に出力されます:

alt text

私は反対のことを指定したとき、トップパネルは、そんなに大きな下部パネルよりも、なぜ私にはわかりません。 (2,5)、底部には(5,5)である。サイズを小さくすると奇妙な振る舞いをしますが、基本的には私が望むものが与えられます(下の画像を参照)。しかし、それを再び大きくすると、比率を維持する方法がわかりません。

alt text

しかし、あなたは、底部がはるかに小さく、はるかに大きい上部になっと((下)他の方向における劇的な形状および比率の変化を見ることができる(たとえ少量)大きいサイズ変更起動時)。

alt text

はまだこのサイザーを習得しようとすると、本当に私が見てきた例のいずれかでこの問題を見つけることができません。また、すべてのパラメータを試してみるといくつかのテストをして、私はここで何が起こっているのか理解できません。どんな助けでも大歓迎です。

編集:下記の画像を参考に追加してください。あなたが最初の行のみと可変長された最初の列を指定したグリッドの7行5列の alt text

答えて

2

個人的には、私はVERTICAL方向のBoxSizerを使用します。ここに簡単な例があります:

import wx 

class MyForm(wx.Frame): 

    def __init__(self): 
     wx.Frame.__init__(self, None, wx.ID_ANY, "Tutorial") 

     # Add a panel so it looks the correct on all platforms 
     panel = wx.Panel(self, wx.ID_ANY) 

     control_panel = wx.Panel(panel) 
     control_panel.SetBackgroundColour("Yellow") 
     main_panel = wx.Panel(panel) 
     main_panel.SetBackgroundColour("Blue") 

     sizer = wx.BoxSizer(wx.VERTICAL) 
     sizer.Add(control_panel, 3, wx.EXPAND) 
     sizer.Add(main_panel, 1, wx.EXPAND) 
     panel.SetSizer(sizer) 

# Run the program 
if __name__ == "__main__": 
    app = wx.PySimpleApp() 
    frame = MyForm().Show() 
    app.MainLoop() 

どのパネルがどのパネルであるかを簡単に識別できるように、各パネルの背景色を変更しました。私は、コントロールパネルにあなたはそれを視覚化するだけでなく、ウィジェットの検査ツールを見てみたいかもしれない1の割合を3の割合とメインパネルを与えたことに注意してください:

http://wiki.wxpython.org/Widget%20Inspection%20Tool

+0

これでもSetMaxSizeを使用できますか?私はトップパネルが同じサイズ(yではxが拡張可能)を維持するが、下のパネルは(xとyの中で)拡大するようにしたい。 – johnharris85

+0

私はトップパネル用のネストされたサイザーを使ってそれを得ることができるかもしれませんが、わかりません。 –

1

コントロールパネルが最初の行を占めるため、コントロールパネルが展開されて空き領域が占有されます。

wx.EXPANDフラグは、セルが拡張可能な行または列にある場合にのみ有効です。

+0

おかげで、私はすべての行と列にgrowableを追加しましたが、それははるかに良く見えますが、実際にはトップパネルを特定のサイズに拡大して停止したいと思っています。しかし、下のウィンドウはサイズ変更時に引き続き大きくなる可能性があります。これは可能ですか? – johnharris85

+0

SetMaxSizeを使用して、コントロールパネルの高さを制限してみてください。また、コントロールパネルの高さを(SetSizeを使って)固定し、占有する行を大きくすることはできません。または、これらの2つのパネルのそれぞれが成長する行の数を変更して、割合でプレイすることもできます。 –

+0

私はcontrol_panel.SetMaxSize(wx.Size(150,300))を追加しましたが、何もしていないようですが、どこでも展開できます。さらに、(これはすべての行/列を拡大できるようにした後に起こります)、フレームの端に一定の形状にサイズ変更されたときに奇妙な空間が表示されます(上記の余分な画像を追加しました)。 – johnharris85

関連する問題