gpt4 book ai didi

python - wxpython:带有 wx.SashLayoutWindow 的多个面板

转载 作者:太空宇宙 更新时间:2023-11-04 06:37:28 24 4
gpt4 key购买 nike

我正在尝试创建这个:

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

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

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

如何将面板 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()

最佳答案

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

  1. 创建两个面板,即panel1panel2panel3。看来你已经走到这一步了。
  2. 在两者上设置 sizer(例如 BoxSizer)
  3. 创建两个面板,panel1apanel1b,并将 panel1 作为父级。根据需要将小部件放置在这两个面板中。
  4. 创建两个面板,panel2apanel2b,并将 panel2 作为父级。根据需要将小部件放置在这两个面板中。
  5. 完成!对于所需的布局,您不一定需要 Splitter(仅当您希望使它们可调整大小时才需要。在这种情况下,panel1panel2 被分离器取代。阅读 this example 了解详情)

可视化:

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

关于python - wxpython:带有 wx.SashLayoutWindow 的多个面板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8791365/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com