python做个图片分割界面_python图形化界面设计(wxpython)二分割窗口

本文介绍了使用wxPython开发GUI应用程序时遇到的分割窗问题,特别是sashPosition=0设置无效的情况。作者通过示例代码展示了如何创建和管理分割窗,并提供了针对初始化分割窗时分割条居中问题的解决方案。文章还探讨了三种可能的分割窗应用场景,包括嵌套分割窗和动态调整分割比例的方法。
摘要由CSDN通过智能技术生成

本篇内容来自https://www.cnblogs.com/hhudaqiang/p/6566342.html

用wxpython开发一个简单的exe其实很简单的,但是在开发的过程中会遇到若干的坑、疑问、甚至bug,让人摸不清头脑!恰恰关于这方面的文档是少之又少,看来看去大家还是在官方的文档上加以引用说明,但是我们在开发的过程中遇到的问题,网上几乎找不到相关的解答。不知道是大家没遇到呢?还是遇到解决了不愿分享给大家?我本人是个自动化测试工程,在开发领域可以说是菜鸟一枚,只能把自己遇到的问题拿出来和大家分享!也希望大神们踩过的坑,解决的问题能分享出来,让我们这些小辈们能少踩坑~~好吧,进入今天的主题:wxpython分割窗研究(解决sashPosition=0无效的BUG)!

分割窗在应用的程序开发中是特别常见的,比如robotframework,以及我们python的IDE(PyCharm)的主界面都是分割窗的应用例子,图片如下:

ff805bc9562dc69e10a54326b654ed6a.png

上面就是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

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值