wxpython:多个面板wx.SashLayoutWind公司

2024-10-04 03:22:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试创建这个:

|---------------------------------------------|
| Panel 1a |        Panel 2a        | Panel 3 |
|          |                        |         |
|          |                        |         |
|-----------------------------------|         |
| Panel 1b |        Panel 2b        |         |
|          |                        |         |
|---------------------------------------------|

到目前为止,我只能创建这个:

^{pr2}$

如何将面板1a和面板2a一分为二?用分流器?在

我的代码如下:

import wx


class TestSashWindow(wx.Panel):
    def __init__(self, parent):
        wx.Panel.__init__(self, parent, -1)

        winids = []


        leftwin1 =  wx.SashLayoutWindow(self, -1, wx.DefaultPosition, (200, 30), wx.NO_BORDER|wx.SW_3D)
        leftwin1.SetDefaultSize((120, 1000))
        leftwin1.SetOrientation(wx.LAYOUT_VERTICAL)
        leftwin1.SetAlignment(wx.LAYOUT_RIGHT)
        leftwin1.SetSashVisible(wx.SASH_LEFT, True)



        self.leftWindow1 = leftwin1
        winids.append(leftwin1.GetId())
        self.remainingSpace = wx.Panel(self, -1, style=wx.SUNKEN_BORDER)


        leftwin2 = wx.SashLayoutWindow(self, -1, wx.DefaultPosition, (200, 30), wx.NO_BORDER|wx.SW_3D)
        leftwin2.SetDefaultSize((120, 1000))
        leftwin2.SetOrientation(wx.LAYOUT_VERTICAL)
        leftwin2.SetAlignment(wx.LAYOUT_LEFT)
        leftwin2.SetSashVisible(wx.SASH_RIGHT, True)

        self.leftWindow2 = leftwin2
        winids.append(leftwin2.GetId())
        self.remainingSpace = wx.Panel(self, -1, style=wx.SUNKEN_BORDER)

        self.Bind(wx.EVT_SASH_DRAGGED_RANGE, self.OnSashDrag,id=min(winids), id2=max(winids))
        self.Bind(wx.EVT_SIZE, self.OnSize)
        slw = leftwin1

        x = wx.Notebook(slw, -1)
        for i in xrange(2):
            x.AddPage(wx.Panel(x, -1), str(i))

class mainframe(wx.Frame):
    def __init__(self):
        wx.Frame.__init__(self, None, -1, size=(400,300), title="sash test")

        self.a = TestSashWindow(self)


if __name__ == '__main__':
    a = wx.App(0)
    b = mainframe()
    b.Show(1)
    a.MainLoop()

Tags: self面板initdefclassparentwxlayout
1条回答
网友
1楼 · 发布于 2024-10-04 03:22:13

布局管理的一般概念是容器和小部件。在容器中,可以放置其他容器和小部件。为了完成给定的布局,您必须以一种巧妙的方式在层次结构中组织容器和小部件。由于您提供的代码仍然不完整,所以我不会为您提供完整的解决方案,而是回答您的问题:如何拆分两个面板。在

  1. 创建两个面板,即panel1panel2和{}。看来你已经走了这么远。在
  2. 在两者上都设置sizer(例如aBoxSizer
  3. 创建两个面板,panel1a和{},其中panel1作为父面板。将小部件放入这两个面板中。在
  4. 创建两个面板,panel2a和{},其中panel2作为父面板。将小部件放入这两个面板中。在
  5. 完成了!对于所需的布局,您不一定需要Splitter(仅当您希望使其大小可调整时)。在这种情况下,panel1和{}被拆分器替换。阅读this example了解详细信息)

可视化:

+ mainframe (horizontal layout)
|
+-panel1 (vertical layout)
| +-panel1a
| +-panel1b
|
+-panel2 (vertical layout)
| +panel2a
| +panel2b
|
+-panel3

相关问题 更多 >