1

wxFrame に wxCollapsiblePane と wxGrid があります。wxCollapsiblePane を折りたたんだり展開したりするたびに、フレーム全体のサイズが変更されます。私が望むのは、代わりに wxGrid を拡大および縮小し、フレームを同じサイズのままにすることです。また、wxFrame を 500x500 のサイズで明示的に作成していますが、実際には内容に合わせて縮小されていることにも気付きました。これはサイザーと関係があると思いますが、私が試したものはこれに影響を与えていないようです. 誰かが私が間違っているところを指摘できますか? これまでの私のコードは次のとおりです。

import wx
import wx.grid

class Frame(wx.Frame):

    def __init__(self, *args, **kwargs):
        super(Frame, self).__init__(*args, **kwargs)
        cpane = wx.CollapsiblePane(self)
        p = cpane.GetPane()
        sz = wx.BoxSizer()
        sz.Add(wx.TextCtrl(p), 1, wx.EXPAND)
        p.SetSizer(sz)

        sizer = wx.BoxSizer(wx.VERTICAL)
        self.grid = wx.grid.Grid(self)
        self.grid.CreateGrid(5, 5)

        sizer.Add(cpane, 0, wx.EXPAND)
        sizer.Add(self.grid, 1, wx.EXPAND)
        self.SetSizer(sizer)
        self.SetAutoLayout(1)
        sizer.Fit(self)
        self.Show()

app = wx.App(False)
win = Frame(None, size=(500, 500))
win.Show()
app.MainLoop()
4

1 に答える 1

4

CollapsiblePane がフレームのサイズを変更できないようにするには、作成時に wx.CP_NO_TLW_RESIZE スタイルを使用します。http://docs.wxwidgets.org/trunk/classwx_collapsible_pane.htmlを参照してください。

Fit() 呼び出しは、コンテンツに合わせてフレームを縮小しているものです。そうなってほしくない場合は必要ありません。SetSizer がそのプロパティをオンにするため、コード内の SetAutoLayout 呼び出しは冗長です。

于 2013-01-16T18:45:59.410 に答える