Wxpython pannel切换
演示效果
实现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切换的更多相关文章
- wxpython tab切换页面
最近没事学习下wxpython,发现很少有关于页面切换的demo,这边分享下2中切换的方法.第一种:利用wx.Notebook第二种:利用Sizer布局实现(自己写的),代码没有涉及到什么重构之类的优 ...
- python下wxpython程序国际化的实践(中文英文切换)
一.什么是python的国际化(I18N) 有关I18N,百度上解释一大堆,个人比较喜欢这个说法. i18n是 Internationalization 这个英文的简写,因为International ...
- Python图形界面开发—wxPython库的布局管理及页面切换
前言 wxPython是基于Python的跨平台GUI扩展库,对wxWidgets( C++ 编写)封装实现.GUI程序的开发中界面布局是很重要的一个部分,合理的页面布局能够给予用户良好使用体验.虽然 ...
- wxpython 基本的控件 (文本)
wxPython 工具包提供了多种不同的窗口部件,包括了本章所提到的基本控件.我们涉及静态文本.可编辑的文本.按钮.微调.滑块.复选框.单选按钮.选择器.列表框.组合框和标尺.对于每种窗口部件,我们将 ...
- wxpython 基本的控件 (按钮)
使用按钮工作 在wxPython 中有很多不同类型的按钮.这一节,我们将讨论文本按钮.位图按钮.开关按钮(toggle buttons )和通用(generic )按钮. 如何生成一个按钮? 在第一部 ...
- 通过python切换hosts文件
做开发或测试时常需要切换hosts ,如果hosts比较多,那么频繁的打开hosts文件对地址加注释(#),再把去掉注释是个繁琐的事情. 当然,SwitchHosts 已经可以帮我们方便的解决了这个繁 ...
- 很好用的Tab标签切换功能,延迟Tab切换。
一个网页,Tab标签的切换是常见的功能,但我发现很少有前端工程师在做该功能的时候,会为用户多想想,如果你觉得鼠标hover到标签上,然后切换到相应的内容,就那么简单的话,你将是一个不合格的前端工程师啊 ...
- wxpython分割窗研究(解决sashPosition=0无效的BUG)
用wxpython开发一个简单的exe其实很简单的,但是在开发的过程中会遇到若干的坑.疑问.甚至bug,让人摸不清头脑!恰恰关于这方面的文档是少之又少,看来看去大家还是在官方的文档上加以引用说明,但是 ...
- [Python] wxPython 编辑框组件学习总结 (原创)
1.总结 1.常用4种 编辑框 的构造 1.普通编辑框 单行输入的简单编辑框 (?为所在框的对象,同下) self.textBox = wx.TextCtrl(parent = ?) 2.密码编辑框 ...
随机推荐
- SHA加密
import java.security.MessageDigest; /** * 提供SHA加密 */ public class SHAUtil { // 进行SHA-1加密 public stat ...
- R语言与概率统计(六) 主成分分析 因子分析
超高维度分析,N*P的矩阵,N为样本个数,P为指标,N<<P PCA:抓住对y对重要的影响因素 主要有三种:PCA,因子分析,回归方程+惩罚函数(如LASSO) 为了降维,用更少的变量解决 ...
- Ubuntu开放指定端口
一般情况下,ubuntu安装好的时候,iptables会被安装上,如果没有的话那就安装上吧 安装 在终端输入 sudo apt-get install iptables 添加规则 在终端输入 ipta ...
- 刀塔OMG塔防1.23单机版使用方法
使用方法1.确保魔兽的版本为1.26(低版本会报错),如果版本不对用附件中的版本转换器转一下2.把 omg.w3x 复制到 魔兽的MAPS文件夹 WarcraftIII 游戏根目录\Maps3.双击运 ...
- Windows Server 2019安装OpenSSH Server简明教程
Windows Server 2019安装OpenSSH Server简明教程 Windows Server 2019内置OpenSSH Server组件了.只不过OpenSSH Server默认 ...
- redhat 5中ifconfig不能使用问题
ifconfig不能使用问题 输入 ifconfig 命令的绝对路径, ifconfig在是/sbin这个目录下面, 所以在终端输入下列命令就可以运行此命令:/sbin/ifconfig 我们还可以修 ...
- flask内置的信号
from flask import Flask,request,template_rendered,render_template,got_request_exception from signals ...
- NPM安装过程中的一些问题与解决
1. 安装 vue-cli3后提示 : Package require os(darwin) not compatible with your platform(win32). 上面是因为安装 npm ...
- Java笔记1: 输入输出与变量常量
输入方法 nextLine 以Enter为结束符,也就是说 nextLine()方法返回的是输入回车之前的所有字符. 可以获得空白的一串字符. import java.util.Scanner; pu ...
- Elastic Search中normalization和分词器
为key_words提供更加完整的倒排索引. 如:时态转化(like | liked),单复数转化(man | men),全写简写(china | cn),同义词(small | little)等. ...