6

グリッドバッグサイザーを使用して、フレーム内に2つのパネルを配置しています。

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の上に配置します(上記のように)。しかし、これは私が得る出力です:

代替テキスト

反対を指定したのに、なぜトップパネルがボトムパネルよりもはるかに大きいのかわかりません。(2、5)は上部、(5、5)は下部です。また、サイズを小さくすると奇妙な動作をします。基本的には必要なものが得られます(下の画像を参照)が、再度大きくしたときに比率を維持する方法がわかりません。

代替テキスト

ただし、サイズを大きく(少しでも)開始すると、形状と比率が反対方向に劇的に変化することがわかります(下部がはるかに小さくなり、上部がはるかに大きくなります)。

代替テキスト

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

編集:下のコメントを支援するために下の画像を追加しました。 代替テキスト

4

2 に答える 2

2

個人的には、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()

各パネルの背景色を変更して、どれがどれかがわかりやすいようにしました。コントロールパネルに3の比率を与え、メインパネルに1の比率を与えたことに注意してください。ウィジェット検査ツールも見て、視覚化するのに役立てることができます。

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

于 2011-01-25T16:47:59.620 に答える
1

グリッド内の7行と5列のうち、拡張可能にする最初の行と最初の列のみを指定しました。

コントロールパネルは最初の行を占めるため、使用可能なスペースを占めるように拡張されます。

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

于 2011-01-15T17:47:45.717 に答える