演示效果

实现panel切换思路

1.创建所有在某个区域需要切换面板对象,设置为None

  1. self.panel_Celan1 = None
  2. self.panel_Celan2 = None
  3. self.panel_Celan3 = None
  4. self.panel_Celan1_1 =None

2.我们要实现切换,就是删除在这个位置的其他panel,然后创建显示你想要显示的panel。

我们以侧栏第二个按钮为例:

我们想要显示self.panel_Celan2,而在这个位置可能存在self.panel_Celan1,self.panel_Celan3,self.panel_Celan1_1,

对于self.panel_Celan1,self.panel_Celan3,self.panel_Celan1_1这些panel,全部需要判断,如果存在,则删除,如果不存在,我们就不需要操作

而我们需要切换显示的panel只需要在不存在的时候创建即可,因为你一直点击同一个按钮,已经创建panel,不需要再次创建panel。

  1. if event.GetEventObject()==self._caidan2:
  2. # 如果需要显示的地方存在其他面板,删除
  3. if self.panel_Celan1:
  4. self.panel_Celan1.Destroy()
  5. if self.panel_Celan1_1:
  6. self.panel_Celan1_1.Destroy()
  7. if self.panel_Celan3:
  8. self.panel_Celan3.Destroy()
  9. if not self.panel_Celan2 :
  10. self.panel_Celan2 = wx.Panel(self, pos=(200, 0), size=(700, 700))

源码

  1. #!/usr/bin/env python
  2.  
  3. '''
  4. 静态文本、可控文本、对话框、GetApp()
  5. '''
  6. import wx,time
  7. ID_EXIT=200
  8. ID_ABOUT=201
  9.  
  10. class Frame(wx.Frame): #2 wx.Frame子类
  11. def __init__(self,parent = None,id = -1,title ='系统管理界面'):
  12. wx.Frame.__init__(self,parent,id,title,size=(900,600))
  13. self.panel_Celan1 = None
  14. self.panel_Celan2 = None
  15. self.panel_Celan3 = None
  16. self.panel_Celan1_1 =None
  17. self.setupStatusBar()
  18. self.InitCelan()
  19. self.InitButton()
  20.  
  21. #初始化状态栏
  22. def setupStatusBar(self):
  23. # 状态栏
  24. sb = self.CreateStatusBar(2) # 2代表将状态栏分为两个
  25. self.SetStatusWidths([-1, -2]) # 比例为1:2
  26. self.SetStatusText("Ready", 0) # 0代表第一个栏,Ready为内容
  27. # timmer
  28. self.timer = wx.PyTimer(self.Notify)
  29. self.timer.Start(1000, wx.TIMER_CONTINUOUS)
  30. self.Notify()
  31.  
  32. # 实时显示时间
  33. def Notify(self):
  34. t = time.localtime(time.time())
  35. st = time.strftime('%Y-%m-%d %H:%M:%S', t)
  36. self.SetStatusText(st, 1) # 这里的1代表将时间放入状态栏的第二部分上
  37.  
  38. # 初始化登陆
  39. def InitButton(self):
  40. self.panel_Celan1 = wx.Panel(self, pos=(400, 150), size=(300, 300))
  41. wx.StaticText(self.panel_Celan1,label="Username",pos=(20,20))
  42. wx.StaticText(self.panel_Celan1, label="Password", pos=(20, 50))
  43. self._username=wx.TextCtrl(self.panel_Celan1,pos=(110,15))
  44. self._passwd = wx.TextCtrl(self.panel_Celan1, pos=(110, 45),style=wx.TE_PASSWORD)
  45.  
  46. self._submit_btn=wx.Button(self.panel_Celan1,label=u'提交',pos=(100,100),size=(50,30))
  47. self.panel_Celan1.Bind(wx.EVT_BUTTON,self.Onclick,self._submit_btn)
  48.  
  49. #处理登陆事件
  50. def Onclick(self,event):
  51. global denglu_flag
  52. if event.GetEventObject()==self._submit_btn:
  53. user = self.GetUsername()
  54. passwd = self.GetPasswd()
  55. print(user+":"+passwd)
  56. if(user == "wenli"and passwd == ""):
  57. denglu_flag=True
  58. self.panel_Celan1.Destroy()
  59. self.panel_Celan1_1 =wx.Panel(self, pos=(400, 150), size=(300, 300))
  60. wx.StaticText(self.panel_Celan1_1, label="欢迎登陆", pos=(130, 150))
  61. def GetUsername(self):
  62. return self._username.GetValue()
  63.  
  64. def GetPasswd(self):
  65. return self._passwd.GetValue()
  66.  
  67. #初始化侧栏
  68. def InitCelan(self):
  69. self.panel_Celan = wx.Panel(self, pos=(0, 0), size=(200, 800)) # 创建侧栏画板 
  70. self._background = wx.Image("background.jpg",type = wx.BITMAP_TYPE_ANY,)
  71. self._background = self._background.Rescale(200,150) #改变图像大小
  72. wx.StaticBitmap(self.panel_Celan,-1,wx.BitmapFromImage( self._background)) #显示图像
  73. self._caidan1 = wx.Button(self.panel_Celan, label=u'用户信息', pos=(0, 150), size=(200, 30))
  74. self.panel_Celan.Bind(wx.EVT_BUTTON, self.Onclick_Ce, self._caidan1)
  75. self._caidan2 = wx.Button(self.panel_Celan, label=u'图书馆大厅', pos=(0, 180), size=(200, 30))
  76. self.panel_Celan.Bind(wx.EVT_BUTTON, self.Onclick_Ce, self._caidan2)
  77. self._caidan3 = wx.Button(self.panel_Celan, label=u'公告', pos=(0, 210), size=(200, 30))
  78. self.panel_Celan.Bind(wx.EVT_BUTTON, self.Onclick_Ce, self._caidan3)
  79.  
  80. #处理侧栏的点击事件
  81. def Onclick_Ce(self,event):
  82. global denglu_flag
  83. if event.GetEventObject() == self._caidan1:
  84. # 如果需要显示的地方存在其他面板,删除
  85. if self.panel_Celan2:
  86. self.panel_Celan2.Destroy()
  87. if self.panel_Celan3:
  88. self.panel_Celan3.Destroy()
  89. if not self.panel_Celan1 :
  90. if(denglu_flag == False):
  91. self.InitButton()
  92. else:
  93. if not self.panel_Celan1_1:
  94. self.panel_Celan1_1 = wx.Panel(self, pos=(400, 150), size=(300, 300))
  95. wx.StaticText(self.panel_Celan1_1, label="欢迎登陆", pos=(130, 150))
  96.  
  97. if event.GetEventObject()==self._caidan2:
  98. # 如果需要显示的地方存在其他面板,删除
  99. if self.panel_Celan1:
  100. self.panel_Celan1.Destroy()
  101. if self.panel_Celan1_1:
  102. self.panel_Celan1_1.Destroy()
  103. if self.panel_Celan3:
  104. self.panel_Celan3.Destroy()
  105. if not self.panel_Celan2 :
  106. self.panel_Celan2 = wx.Panel(self, pos=(200, 0), size=(700, 700))
  107.  
  108. if event.GetEventObject() == self._caidan3:
  109. if self.panel_Celan1:
  110. self.panel_Celan1.Destroy()
  111. if self.panel_Celan1_1:
  112. self.panel_Celan1_1.Destroy()
  113. if self.panel_Celan2 :
  114. self.panel_Celan2.Destroy()
  115. if not self.panel_Celan3:
  116. self.panel_Celan3 = wx.Panel(self, pos=(400, 150), size=(300, 300))
  117. wx.StaticText(self.panel_Celan3, label="公告", pos=(130, 150))
  118.  
  119. class App(wx.App): #5 wx.App子类
  120. def __init__(self):
  121. #如果要重写__init__,必须调用wx.App的__init__,否则OnInit方法不会被调用
  122. wx.App.__init__(self)
  123. def OnInit(self):
  124. self.frame=Frame()
  125. self.SetTopWindow(self.frame)
  126. self.frame.Show()
  127.  
  128. return True
  129. if __name__=="__main__":
  130. denglu_flag = False
  131. app = App()
  132. app.MainLoop()

Wxpython pannel切换的更多相关文章

  1. wxpython tab切换页面

    最近没事学习下wxpython,发现很少有关于页面切换的demo,这边分享下2中切换的方法.第一种:利用wx.Notebook第二种:利用Sizer布局实现(自己写的),代码没有涉及到什么重构之类的优 ...

  2. python下wxpython程序国际化的实践(中文英文切换)

    一.什么是python的国际化(I18N) 有关I18N,百度上解释一大堆,个人比较喜欢这个说法. i18n是 Internationalization 这个英文的简写,因为International ...

  3. Python图形界面开发—wxPython库的布局管理及页面切换

    前言 wxPython是基于Python的跨平台GUI扩展库,对wxWidgets( C++ 编写)封装实现.GUI程序的开发中界面布局是很重要的一个部分,合理的页面布局能够给予用户良好使用体验.虽然 ...

  4. wxpython 基本的控件 (文本)

    wxPython 工具包提供了多种不同的窗口部件,包括了本章所提到的基本控件.我们涉及静态文本.可编辑的文本.按钮.微调.滑块.复选框.单选按钮.选择器.列表框.组合框和标尺.对于每种窗口部件,我们将 ...

  5. wxpython 基本的控件 (按钮)

    使用按钮工作 在wxPython 中有很多不同类型的按钮.这一节,我们将讨论文本按钮.位图按钮.开关按钮(toggle buttons )和通用(generic )按钮. 如何生成一个按钮? 在第一部 ...

  6. 通过python切换hosts文件

    做开发或测试时常需要切换hosts ,如果hosts比较多,那么频繁的打开hosts文件对地址加注释(#),再把去掉注释是个繁琐的事情. 当然,SwitchHosts 已经可以帮我们方便的解决了这个繁 ...

  7. 很好用的Tab标签切换功能,延迟Tab切换。

    一个网页,Tab标签的切换是常见的功能,但我发现很少有前端工程师在做该功能的时候,会为用户多想想,如果你觉得鼠标hover到标签上,然后切换到相应的内容,就那么简单的话,你将是一个不合格的前端工程师啊 ...

  8. wxpython分割窗研究(解决sashPosition=0无效的BUG)

    用wxpython开发一个简单的exe其实很简单的,但是在开发的过程中会遇到若干的坑.疑问.甚至bug,让人摸不清头脑!恰恰关于这方面的文档是少之又少,看来看去大家还是在官方的文档上加以引用说明,但是 ...

  9. [Python] wxPython 编辑框组件学习总结 (原创)

    1.总结 1.常用4种 编辑框 的构造 1.普通编辑框 单行输入的简单编辑框 (?为所在框的对象,同下) self.textBox = wx.TextCtrl(parent = ?) 2.密码编辑框 ...

随机推荐

  1. SHA加密

    import java.security.MessageDigest; /** * 提供SHA加密 */ public class SHAUtil { // 进行SHA-1加密 public stat ...

  2. R语言与概率统计(六) 主成分分析 因子分析

    超高维度分析,N*P的矩阵,N为样本个数,P为指标,N<<P PCA:抓住对y对重要的影响因素 主要有三种:PCA,因子分析,回归方程+惩罚函数(如LASSO) 为了降维,用更少的变量解决 ...

  3. Ubuntu开放指定端口

    一般情况下,ubuntu安装好的时候,iptables会被安装上,如果没有的话那就安装上吧 安装 在终端输入 sudo apt-get install iptables 添加规则 在终端输入 ipta ...

  4. 刀塔OMG塔防1.23单机版使用方法

    使用方法1.确保魔兽的版本为1.26(低版本会报错),如果版本不对用附件中的版本转换器转一下2.把 omg.w3x 复制到 魔兽的MAPS文件夹 WarcraftIII 游戏根目录\Maps3.双击运 ...

  5. Windows Server 2019安装OpenSSH Server简明教程

    Windows Server 2019安装OpenSSH Server简明教程   Windows Server 2019内置OpenSSH Server组件了.只不过OpenSSH Server默认 ...

  6. redhat 5中ifconfig不能使用问题

    ifconfig不能使用问题 输入 ifconfig 命令的绝对路径, ifconfig在是/sbin这个目录下面, 所以在终端输入下列命令就可以运行此命令:/sbin/ifconfig 我们还可以修 ...

  7. flask内置的信号

    from flask import Flask,request,template_rendered,render_template,got_request_exception from signals ...

  8. NPM安装过程中的一些问题与解决

    1. 安装 vue-cli3后提示 : Package require os(darwin) not compatible with your platform(win32). 上面是因为安装 npm ...

  9. Java笔记1: 输入输出与变量常量

    输入方法 nextLine 以Enter为结束符,也就是说 nextLine()方法返回的是输入回车之前的所有字符. 可以获得空白的一串字符. import java.util.Scanner; pu ...

  10. Elastic Search中normalization和分词器

    为key_words提供更加完整的倒排索引. 如:时态转化(like | liked),单复数转化(man | men),全写简写(china | cn),同义词(small | little)等. ...