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.密码编辑框 ...
随机推荐
- Dalvik VM和JVM的比较
为什么不是jvm 而要搞一个dalvik vm ? jvm 在设计上考虑的时pc机 dalvik在设计上针对手机,特点:1. 速度快 2. 功耗低 (在移动设备上)
- Java并发包concurrent——ConcurrentHashMap
转: Java并发包concurrent——ConcurrentHashMap 2018年07月19日 20:43:23 Bill_Xiang_ 阅读数 16390更多 所属专栏: Java Conc ...
- python常见队列queue分类
import queue # 1.普通q# 2.先进后出q# 3.优先级q 普通Queue q=queue.Queue(3)q.put(1)q.put(2)q.put(3)print(q.get()) ...
- Linux按顺序启动多个jar的shell脚本
#!/bin/sh export EUREKA=pigx-eureka.jar export CONFIG=pigx-config.jar export GATEWAY=pigx-gateway.ja ...
- Django 框架学习 ---- 安装
这里引用了源码方式安装: 1.git clone https://github.com/django/django.git 2.cd django/ 3.python setup.py install ...
- docker容器创建MariaDB镜像
基于commit命令方式创建 docker的安装 [root@test01 ~]# yum install docker [root@test01 ~]# systemctl enable docke ...
- 大数据备忘录———将数据从oracle导入impala中
上周遇到了将数据从oracle导入到impala的问题,这个项目耽误了我近一周的时间,虽然是种种原因导致的,但是还是做个总结. 需求首先是跑数据,跑数据这个就不叙述,用的是公司的平台. 讲讲耽误我最久 ...
- socket传送文件格式的问题
在python3中socket传送文件只能传送‘bytes'类型,如下例子: import socket client = socket.socket()client.connect(("l ...
- 201709-3 JSON查询
问题描述 JSON (JavaScript Object Notation) 是一种轻量级的数据交换格式,可以用来描述半结构化的数据.JSON 格式中的基本单元是值 (value),出于简化的目的本题 ...
- 刨根究底字符编码之十——Unicode字符集的编码方式以及码点、码元
Unicode字符集的编码方式以及码点.码元 一.字符编码方式CEF的选择 1. 由于Unicode字符集非常大,有些字符的编号(码点值)需要两个或两个以上字节来表示,而要对这样的编号进行编码,也必须 ...