本篇内容来自https://www.cnblogs.com/hhudaqiang/p/6566342.html
用wxpython开发一个简单的exe其实很简单的,但是在开发的过程中会遇到若干的坑、疑问、甚至bug,让人摸不清头脑!恰恰关于这方面的文档是少之又少,看来看去大家还是在官方的文档上加以引用说明,但是我们在开发的过程中遇到的问题,网上几乎找不到相关的解答。不知道是大家没遇到呢?还是遇到解决了不愿分享给大家?我本人是个自动化测试工程,在开发领域可以说是菜鸟一枚,只能把自己遇到的问题拿出来和大家分享!也希望大神们踩过的坑,解决的问题能分享出来,让我们这些小辈们能少踩坑~~好吧,进入今天的主题:wxpython分割窗研究(解决sashPosition=0无效的BUG)!
分割窗在应用的程序开发中是特别常见的,比如robotframework,以及我们python的IDE(PyCharm)的主界面都是分割窗的应用例子,图片如下:
上面就是3个分割窗,注意的是wxpython最多只支持2个分割窗,如果开发这种分割窗只能用嵌套了!分割子窗口1与2其实是嵌套在画板1上面的,下面我也介绍如何利用Sizer布局得到这样的分割窗。
有了上图直观的认识后,我也引用个官方的例子,然后从这上面拓展,官方例子如下:
#coding=utf-8
importwxclassMyframe(wx.Frame):def __init__(self):
wx.Frame.__init__(self,None)
self.minpane=0
self.initpos=0
self.MakeMenuBar()
self.sp=wx.SplitterWindow(self)#创建一个分割窗
self.p1=wx.Panel(self.sp,style=wx.SUNKEN_BORDER) #创建子面板
self.p2=wx.Panel(self.sp,style=wx.SUNKEN_BORDER)
self.p1.SetBackgroundColour("pink")
self.p2.SetBackgroundColour("blue")
self.p1.Hide()#确保备用的子面板被隐藏
self.p2.Hide()
self.sp.Initialize(self.p1)#初始化分割窗
self.Bind(wx.EVT_SPLITTER_SASH_POS_CHANGING,self.OnSashChanging,self.sp)
self.Bind(wx.EVT_SPLITTER_SASH_POS_CHANGED,self.OnSashChanged,self.sp)def OnSplitV(self, evt): #响应垂直分割请求
self.sp.SplitVertically(self.p1, self.p2, self.initpos)defMakeMenuBar(self):
menu=wx.Menu()
item=menu.Append(-1,"Split horizontally")
self.Bind(wx.EVT_MENU,self.OnSplitH,item)
self.Bind(wx.EVT_UPDATE_UI,self.OnCheckCanSplit,item)
item=menu.Append(-1,"Split vertically")
self.Bind(wx.EVT_MENU,self.OnSplitV,item)
self.Bind(wx.EVT_UPDATE_UI,self.OnCheckCanSplit,item)
item=menu.Append(-1,"Unsplit")
self.Bind(wx.EVT_MENU,self.OnUnsplit,item)
self.Bind(wx.EVT_UPDATE_UI,self.OnCheckCanUnsplit,item)
menu.AppendSeparator()
item=menu.Append(-1,"Set initial sash position")
self.Bind(wx.EVT_MENU,self.OnSetPos,item)
item= menu.Append(-1, "Set minimum pane size")
self.Bind(wx.EVT_MENU,self.OnSetMin,item)
menu.AppendSeparator()
mbar=wx.MenuBar()
mbar.Append(menu,"Splitter")
self.SetMenuBar(mbar)defOnSashChanging(self,evt):print "OnSashChanging:",e