演示效果

实现panel切换思路

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

self.panel_Celan1 = None
self.panel_Celan2 = None
self.panel_Celan3 = None
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。

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

源码

#!/usr/bin/env python'''
静态文本、可控文本、对话框、GetApp()
'''
import wx,time
ID_EXIT=200
ID_ABOUT=201class Frame(wx.Frame): #2 wx.Frame子类def __init__(self,parent = None,id = -1,title ='系统管理界面'):wx.Frame.__init__(self,parent,id,title,size=(900,600))self.panel_Celan1 = Noneself.panel_Celan2 = Noneself.panel_Celan3 = Noneself.panel_Celan1_1 =Noneself.setupStatusBar()self.InitCelan()self.InitButton()#初始化状态栏def setupStatusBar(self):# 状态栏sb = self.CreateStatusBar(2)  # 2代表将状态栏分为两个self.SetStatusWidths([-1, -2])  # 比例为1:2self.SetStatusText("Ready", 0)  # 0代表第一个栏,Ready为内容# timmerself.timer = wx.PyTimer(self.Notify)self.timer.Start(1000, wx.TIMER_CONTINUOUS)self.Notify()# 实时显示时间def Notify(self):t = time.localtime(time.time())st = time.strftime('%Y-%m-%d %H:%M:%S', t)self.SetStatusText(st, 1)  # 这里的1代表将时间放入状态栏的第二部分上# 初始化登陆def InitButton(self):self.panel_Celan1 = wx.Panel(self, pos=(400, 150), size=(300, 300))wx.StaticText(self.panel_Celan1,label="Username",pos=(20,20))wx.StaticText(self.panel_Celan1, label="Password", pos=(20, 50))self._username=wx.TextCtrl(self.panel_Celan1,pos=(110,15))self._passwd = wx.TextCtrl(self.panel_Celan1, pos=(110, 45),style=wx.TE_PASSWORD)self._submit_btn=wx.Button(self.panel_Celan1,label=u'提交',pos=(100,100),size=(50,30))self.panel_Celan1.Bind(wx.EVT_BUTTON,self.Onclick,self._submit_btn)#处理登陆事件def Onclick(self,event):global denglu_flagif event.GetEventObject()==self._submit_btn:user = self.GetUsername()passwd = self.GetPasswd()print(user+":"+passwd)if(user == "wenli"and passwd == "123456"):denglu_flag=Trueself.panel_Celan1.Destroy()self.panel_Celan1_1 =wx.Panel(self, pos=(400, 150), size=(300, 300))wx.StaticText(self.panel_Celan1_1, label="欢迎登陆", pos=(130, 150))def GetUsername(self):return self._username.GetValue()def GetPasswd(self):return self._passwd.GetValue()#初始化侧栏def InitCelan(self):self.panel_Celan = wx.Panel(self, pos=(0, 0), size=(200, 800))  # 创建侧栏画板 self._background = wx.Image("background.jpg",type = wx.BITMAP_TYPE_ANY,)self._background = self._background.Rescale(200,150) #改变图像大小wx.StaticBitmap(self.panel_Celan,-1,wx.BitmapFromImage( self._background)) #显示图像self._caidan1 = wx.Button(self.panel_Celan, label=u'用户信息', pos=(0, 150), size=(200, 30))self.panel_Celan.Bind(wx.EVT_BUTTON, self.Onclick_Ce, self._caidan1)self._caidan2 = wx.Button(self.panel_Celan, label=u'图书馆大厅', pos=(0, 180), size=(200, 30))self.panel_Celan.Bind(wx.EVT_BUTTON, self.Onclick_Ce, self._caidan2)self._caidan3 = wx.Button(self.panel_Celan, label=u'公告', pos=(0, 210), size=(200, 30))self.panel_Celan.Bind(wx.EVT_BUTTON, self.Onclick_Ce, self._caidan3)#处理侧栏的点击事件def Onclick_Ce(self,event):global denglu_flagif event.GetEventObject() == self._caidan1:# 如果需要显示的地方存在其他面板,删除if self.panel_Celan2:self.panel_Celan2.Destroy()if self.panel_Celan3:self.panel_Celan3.Destroy()if not self.panel_Celan1 :if(denglu_flag == False):self.InitButton()else:if not self.panel_Celan1_1:self.panel_Celan1_1 = wx.Panel(self, pos=(400, 150), size=(300, 300))wx.StaticText(self.panel_Celan1_1, label="欢迎登陆", pos=(130, 150))if event.GetEventObject()==self._caidan2:# 如果需要显示的地方存在其他面板,删除if self.panel_Celan1:self.panel_Celan1.Destroy()if self.panel_Celan1_1:self.panel_Celan1_1.Destroy()if self.panel_Celan3:self.panel_Celan3.Destroy()if not self.panel_Celan2 :self.panel_Celan2 = wx.Panel(self, pos=(200, 0), size=(700, 700))if event.GetEventObject() == self._caidan3:if self.panel_Celan1:self.panel_Celan1.Destroy()if self.panel_Celan1_1:self.panel_Celan1_1.Destroy()if  self.panel_Celan2 :self.panel_Celan2.Destroy()if not self.panel_Celan3:self.panel_Celan3 = wx.Panel(self, pos=(400, 150), size=(300, 300))wx.StaticText(self.panel_Celan3, label="公告", pos=(130, 150))class App(wx.App): #5 wx.App子类def __init__(self):#如果要重写__init__,必须调用wx.App的__init__,否则OnInit方法不会被调用wx.App.__init__(self)def OnInit(self):self.frame=Frame()self.SetTopWindow(self.frame)self.frame.Show()return True
if __name__=="__main__":denglu_flag = Falseapp = App()app.MainLoop()

转载于:https://www.cnblogs.com/-wenli/p/11310064.html

Wxpython pannel切换相关推荐

  1. wxpython多个面板_wxpython笔记:Wxpython pannel切换

    #!/usr/bin/env python '''静态文本.可控文本.对话框.GetApp()''' importwx,time ID_EXIT=200ID_ABOUT=201 class Frame ...

  2. wxpython界面切换_wxpython实现按钮切换界面的方法

    本文实例为大家分享了wxpython按钮切换界面的具体实现代码,供大家参考,具体内容如下 #-*- coding:utf-8 -*- import wx class TestFrame(wx.Fram ...

  3. wxpython界面切换_Python图形界面—wxPython库的布局管理及页面切换

    原标题:Python图形界面-wxPython库的布局管理及页面切换 前言 wxPython是基于Python的跨平台GUI扩展库,对wxWidgets( C++ 编写)封装实现.GUI程序的开发中界 ...

  4. wxpython界面切换_Python图形界面开发—wxPython库的布局管理及页面切换

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

  5. wxpython界面切换_wxpython中的图形用户界面

    展开全部 #!/user/bin/python #-*-coding: UTF-8-*- import wx class SketchApp(wx.App): def OnInit(self): bm ...

  6. wxpython滑动面板_wxpython实现按钮切换界面的方法

    本文实例为大家分享了wxpython按钮切换界面的具体实现代码,供大家参考,具体内容如下 #-*- coding:utf-8 -*- import wx class TestFrame(wx.Fram ...

  7. wxpython多个面板_wxpython笔记:wxPython的布局管理实践【嵌入matplotlib、页面切换】...

    索引 1.源码 importwximportnumpyfrom matplotlib.backends.backend_wxagg importFigureCanvasWxAgg as FigureC ...

  8. python图形界面开发库_Python图形界面开发—wxPython库的布局管理及页面切换

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

  9. C# (1)点击菜单跳出新窗体,(2)在主窗体中切换子窗体(pannel控件的使用)

    窗体设计,需要在点击菜单栏时显示不同的窗体 点击充值记录后显示出新窗体 实现效果 代码 点击充值信息在主窗体切换子窗体 实现效果 实现方法 (1)添加Pannel控件 (2)添加代码(书写在菜单栏的双 ...

最新文章

  1. 【驱动】uboot环境变量分析
  2. 对称加密算法DES,3重DES,TDEA,Blowfish,RC5,IDEA,AES。
  3. checkIP.sh
  4. C++ 创建引用DLL
  5. Thinking in java基础之集合框架
  6. 从按下电源开关到bash提示符
  7. HDU 2818 Building Block
  8. HTTP、TCP、UDP、Socket (转)
  9. 使用MySQL处理百万级以上数据时,几个好习惯常识
  10. S-MAC协议的相关知识
  11. 能玩游戏的计算机推荐,电脑玩啥端游合适 适合长期玩的游戏有哪些
  12. Excel分列-字母与汉字(前后)
  13. find基础命令与提权教程
  14. 视频目标检测与轨迹跟踪代码案例
  15. poi 读取word 遍历表格和单元格中的图片
  16. conda创建环境报错conda.core.subdir_data.Response304ContentUnchanged
  17. css 所有选择器 实例与总结
  18. 步进电机与直流电机(有刷无刷)的优缺点,与伺服电机区别
  19. 50岁自考计算机专业,关于自考中的计算机专业
  20. 从零开始的DIY智能家居 - 基于 ESP32 的智能光照传感器

热门文章

  1. Linux:获取线程的PID(TID、LWP)的几种方式
  2. 费曼和西蒙的学习方法分享
  3. An annotation management system for relational databases(论文阅读)
  4. 美式口语发音技巧:《连读》
  5. 左联接、右联接、内联接、自然联接
  6. 阿里云国际版查看云服务器ecs实例系统日志和截图-Unirech
  7. 076 对称区间的定积分性质
  8. Android,翻转卡片动画,实现翻转卡片的动画效果
  9. 对路径“C:\Inetpub\wwwroot\UploadFile\AssertTemple1.xls”的访问被拒绝。
  10. oracle-29913,Oracle RAC expdp 错误一例 ORA-29913: error in executing ODCIEXTTABLEPOPULATE callout...