演示效果

实现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=201 class 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 = None
self.panel_Celan2 = None
self.panel_Celan3 = None
self.panel_Celan1_1 =None
self.setupStatusBar()
self.InitCelan()
self.InitButton() #初始化状态栏
def setupStatusBar(self):
# 状态栏
sb = self.CreateStatusBar(2) # 2代表将状态栏分为两个
self.SetStatusWidths([-1, -2]) # 比例为1:2
self.SetStatusText("Ready", 0) # 0代表第一个栏,Ready为内容
# timmer
self.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_flag
if event.GetEventObject()==self._submit_btn:
user = self.GetUsername()
passwd = self.GetPasswd()
print(user+":"+passwd)
if(user == "wenli"and passwd == ""):
denglu_flag=True
self.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_flag
if 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 = False
app = App()
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. js五彩小球

    <!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  2. C# 打包安装部署 属性中找不到 查找目标或打开文件位置

    用第三方工具OrcaMis (一个可以修改msi文件的工具)来实现的 最后我又试了几次,以为是再程序打包的时候设置有问题,结果都没有找到原因,没有办法只有需求网络资源,网络上有朋友说VS创建的快捷方式 ...

  3. 分布式存储ceph部署(2)

    一.部署准备: 准备5台机器(linux系统为centos7.6版本),当然也可以至少3台机器并充当部署节点和客户端,可以与ceph节点共用:     1台部署节点(配一块硬盘,运行ceph-depo ...

  4. element-ui分页当前在哪一页,刷新页面保留当前分页

  5. Mysql执行查询语句慢的解决方式

    MySQL使用的是InnoDB引擎.不同于MyISAM引擎只提供表锁,InnoDB提供不同级别的锁.但是在我们日常的操作过程中经常由于对数据库不当的SQL操作导致出现长时间的锁,造成其他的SQL语句长 ...

  6. koa2数据请求相关问题解决方案汇总

    前端请求后端数据,难免会遇到如下几个问题: 1⃣️跨域 2⃣️post/get,其中post请求的方式又分为多种 3⃣️后端数据返回格式(上一篇已经有讨论过,这里不再赘述) 用koa2的话,如何解决这 ...

  7. 【AMAD】cookiecutter-django -- 是一个构建Django项目的脚手架工具

    动机 简介 个人评分 动机 Django内置的命令django-admin startproject其实并不好用,在你上线之前八成已经把它改的面目全非了. 简介 cookiecutter-django ...

  8. Linux核心系统命令

    关机,重启: shutdown -h now:关机 shutdown -r now:重启 文件和目录操作命令: pwd:显示当前所在路径 cd:切换目录 cd - :切换到上一次所在路径 cd ~:切 ...

  9. 【并行计算-CUDA开发】从熟悉到精通 英伟达显卡选购指南

    举报 说到显卡,就不免令人想到英伟达和AMD两家面向个人消费级和企业级最大的显示芯片生产企业,英伟达和AMD,今天小编为大家简单的介绍一下英伟达的显卡选购方面的攻略,为一些想要购买显卡的用户提供一些参 ...

  10. sha256算法原理

    1. SHA256简介 SHA256是SHA-2下细分出的一种算法 SHA-2下又可再分为六个不同的算法标准 包括了:SHA-224.SHA-256.SHA-384.SHA-512.SHA-512/2 ...