0

そのため、サイズ変更などの際に正常に動作するように、サイザーを使用しようとしている 3 つの分割ウィンドウがあります。ここに私が今持っているコードがあります。機能していません。

class SplitterFrame (wx.Frame):

def __init__(self):
 #Create a master window
    self.mainframe = wx.Frame.__init__(self,None,title = 'some frame')
    self.splitter = wx.SplitterWindow(self,-1, style = wx.SP_LIVE_UPDATE)
    self.splitter2 = wx.SplitterWindow(self.splitter,-1, style = wx.SP_LIVE_UPDATE)
    self.splitter.SetMinimumPaneSize(330)
    self.splitter2.SetMinimumPaneSize(160)


    self.panel1 = wx.Panel(self.splitter,-1)
    self.panel1.SetBackgroundColour(wx.WHITE)

    self.panel2 = wx.Panel(self.splitter2,-1)
    self.panel2.SetBackgroundColour(wx.WHITE)

    self.panel3 = wx.Panel(self.splitter2, -1)
    self.panel3.SetBackgroundColour(wx.WHITE)

    #Splitter window attributes
    self.splitter2.SplitVertically(self.panel2,self.panel3, 100)
    self.splitter.SplitVertically(self.panel1,self.splitter2, 200)
    self.splitter.SetSashGravity(0)
    self.splitter2.SetSashGravity(1)
    self.splitter.SetSashPosition(1,redraw = True)
    self.splitter2.SetSashPosition(10000,redraw = True)
    self.Centre()
    self.Layout()
    self.Maximize(True)
    self.Bind(wx.EVT_CLOSE,self.OnClose)

                                   #Set Sizers
    sizer = wx.BoxSizer(wx.VERTICAL)
    sizer.Add(self.splitter,1,wx.ALL|wx.EXPAND)
    sizer.Add(self.splitter2,1,wx.ALL|wx.EXPAND)
    self.SetSizer(sizer)

これに適切なサイザーを適用する方法を教えてもらえますか? 私はサイザーがまったく得意ではないので、ここで見つけた上記のものを使用しました [ wxPython Splitter windows and Panels .

4

1 に答える 1

3

両方のスプリッターをサイザーに追加することはできません。これは、ウィンドウの階層内で兄弟関係にないためです。スプリッターがあり、パネルの 1 つに別のスプリッターがあります。サイザーはサイザー内のウィンドウを直接使用するため、サイザーは役に立ちませんが、サイザーには 1 つのウィンドウ (self.splitter) しかなく、別のウィンドウ (self.splitter2) は self.splitter 内にあります。そのため、サイジングはスプリッター自体の中で行う必要があります。Frame の OnSize イベントを処理し、そこで内側のスプリッターのサイズを変更する必要があります。

編集:コードを追加しました。

class SplitterFrame (wx.Frame):
    def __init__(self):
        #Create a master window
        wx.Frame.__init__(self,None,title = 'some frame')
        self.splitter = wx.SplitterWindow(self,-1, style = wx.SP_LIVE_UPDATE)
        self.splitter2 = wx.SplitterWindow(self.splitter,-1, style = wx.SP_LIVE_UPDATE)
        self.splitter.SetMinimumPaneSize(20)
        self.splitter2.SetMinimumPaneSize(20)

        self.panel1 = wx.Panel(self.splitter,-1)
        self.panel1.SetBackgroundColour(wx.WHITE)

        self.panel2 = wx.Panel(self.splitter2,-1)
        self.panel2.SetBackgroundColour(wx.WHITE)

        self.panel3 = wx.Panel(self.splitter2, -1)
        self.panel3.SetBackgroundColour(wx.WHITE)

        #Splitter window attributes
        self.splitter2.SplitVertically(self.panel2,self.panel3, 100)
        self.splitter.SplitVertically(self.panel1,self.splitter2, 100)
        self.splitter.SetSashGravity(0)
        self.splitter2.SetSashGravity(1)
        self.Centre()
        self.Layout()
        self.Maximize(True)
        self.Bind(wx.EVT_SIZE, self.OnSize)

        sizer = wx.BoxSizer(wx.VERTICAL)
        sizer.Add(self.splitter,2,wx.ALL|wx.EXPAND)
        self.SetSizer(sizer)

    def OnSize(self, evt):
        evt.Skip()
        # here you will change the sash positions to your liking
        self.splitter.SetSashPosition(100,redraw = True)
        self.splitter2.SetSashPosition(200,redraw = True)
于 2015-08-03T11:44:22.890 に答える