分隔窗口(wx.SplitterWindow)就是将窗口分成两部分,即左右或上下两部分,两个窗口之间的分隔线是可以拖动的,称为“窗框”(sash)。
SplitterWindow中一般常用的方法有两种:水平分割跟垂直分割
SplitVertically(LeftWindow, RightWindow, sashPosition=0)。设置左右布局的分隔窗口,LeftWindow为左窗口,RightWindow为右窗口,sashPosition是窗口的位置,可以是0,也可以自定义。
SplitHorizontally(LeftWindow, RightWindow, sashPosition=0)。设置上下布局的分隔窗口,LeftWindow为上窗口,RightWindow为下窗口,sashPosition是窗口的位置,可以是0,也可以自定义。
效果图如下:
大概的思路就是想分割上下两个部分,然后以上部分的窗口作为主体窗口在进行二次分割
# 创建一个分割窗,parent是frameself.sp = wx.SplitterWindow(self)# 创建上子面板self.Panel_Top = wx.Panel(self.sp, style=wx.SUNKEN_BORDER)# 创建上子面板self.Panel_Bottom = wx.Panel(self.sp, style=wx.SUNKEN_BORDER)# 创建一个子分割窗,parent是Panel_Topself.Top = wx.SplitterWindow(self.Panel_Top)# 创建一个垂直布局self.box = wx.BoxSizer(wx.VERTICAL)# 将子分割窗布局延伸至整个空间self.box.Add(self.Top, 1, wx.EXPAND)self.Panel_Top.SetSizer(self.box)# 在子分割窗的基础上创建子画板self.Panel_Top_Left = wx.Panel(self.Top, style=wx.SUNKEN_BORDER)# 在子分割窗的基础上创建子画板self.Panel_Top_Right = wx.Panel(self.Top, style=wx.SUNKEN_BORDER)# 分割窗体self.sp.SplitHorizontally(self.Panel_Top, self.Panel_Bottom, 450)self.Top.SplitVertically(self.Panel_Top_Left, self.Panel_Top_Right, 500)
补充一点小知识:
# 窗口居中显示self.Center()# 调用窗口展示功能<br>self.Show(True)
全部代码
TOOL_TITLE = u'游戏打渠道包工具'# 显示主页面
class GuiMainFrame(wx.Frame):def __init__(self, parent, title):wx.Frame.__init__(self, parent, title=title, size=(1080, 786))# 窗体分割self.SplitWindow()# 窗口居中显示self.Center()# 调用窗口展示功能<br>self.Show(True)def SplitWindow(self):# 创建一个分割窗,parent是frameself.sp = wx.SplitterWindow(self)# 创建上子面板self.Panel_Top = wx.Panel(self.sp, style=wx.SUNKEN_BORDER)# 创建上子面板self.Panel_Bottom = wx.Panel(self.sp, style=wx.SUNKEN_BORDER)# 创建一个子分割窗,parent是Panel_Topself.Top = wx.SplitterWindow(self.Panel_Top)# 创建一个垂直布局self.box = wx.BoxSizer(wx.VERTICAL)# 将子分割窗布局延伸至整个空间self.box.Add(self.Top, 1, wx.EXPAND)self.Panel_Top.SetSizer(self.box)# 在子分割窗的基础上创建子画板self.Panel_Top_Left = wx.Panel(self.Top, style=wx.SUNKEN_BORDER)# 在子分割窗的基础上创建子画板self.Panel_Top_Right = wx.Panel(self.Top, style=wx.SUNKEN_BORDER)# 分割窗体self.sp.SplitHorizontally(self.Panel_Top, self.Panel_Bottom, 450)self.Top.SplitVertically(self.Panel_Top_Left, self.Panel_Top_Right, 500)if __name__ == "__main__":# 实例化一个主循环<br>app = wx.App()# 实例化一个窗口<br>frame = GuiMainFrame(None, 'Game')# 启动主循环app.MainLoop()
有不足之处欢迎大佬指点