当前位置: 代码迷 >> 综合 >> Python GUI(WxPython)编程(一)-- 窗体分割
  详细解决方案

Python GUI(WxPython)编程(一)-- 窗体分割

热度:61   发布时间:2024-02-26 21:49:14.0

分隔窗口(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()

有不足之处欢迎大佬指点