最近没事学习下wxpython,发现很少有关于页面切换的demo,这边分享下2中切换的方法。
第一种:利用wx.Notebook
第二种:利用Sizer布局实现(自己写的),代码没有涉及到什么重构之类的优化,只是说下本人的思想方法,希望为博友提出建议。
第一次随笔,废话不多说直接上代码吧
第一种方法:
#coding=utf-8
import wx
class Myframe(wx.Frame):
def __init__(self):
wx.Frame.__init__(self,None,-1)
nb=wx.Notebook(self)
pane1_1=wx.Panel(nb,-1)
wx.StaticText(pane1_1, label='i am pane1_1')
pane1_2 = wx.Panel(nb, -1)
wx.StaticText(pane1_2, label='i am pane1_2')
pane1_3 = wx.Panel(nb, -1)
wx.StaticText(pane1_3, label='i am pane1_3')
map(nb.AddPage,[pane1_1,pane1_2,pane1_3],["pane1_1","pane1_2","pane1_3"])
app=wx.PySimpleApp()
frame=Myframe()
frame.Show(True)
app.MainLoop()

第二种方法(利用Sizer):

#coding=utf-8
import wx
import wx.html
import os
from fun import login
text1='''
<html>
<head>
<title>Page title</title>
</head>
<body>
<p align="center" id="firstpara" style="color: crimson">
This is hello
</p>
</body>
</html> '''
text2='''
<html>
<head>
<title>Page title</title>
</head>
<body>
<p align="center" id="firstpara" style="color: crimson">
This is the
</body>
</html> '''
text3='''
<html>
<head>
<title>Page title</title>
</head>
<body>
<p align="center" id="firstpara" style="color: crimson">
This is world
</body>
</html> '''
class Myframe(wx.Frame):
def __init__(self):
wx.Frame.__init__(self,None,-1)
self.all_SizerItem=[]
self.panel=wx.Panel(self,-1)#主panel
self.hox=wx.BoxSizer(wx.VERTICAL)#垂直布局
self.create_button()#第一行button行
self.create_tap_item()#第二行item行
self.panel.SetSizer(self.hox)
self.hox.Layout()
self.create_Menu()
self.create_Toolbar()
def create_tap_item(self):
button_item=["hello","the","world"]
for i,each in enumerate(button_item):
child_panel = wx.Panel(self.panel, -1)#新建子panel
panel_child_hox=wx.BoxSizer(wx.HORIZONTAL)
html = wx.html.HtmlWindow(child_panel)
if i==0:
text=text1
elif i==1:
text=text2
else:
text=text3
html.SetPage(text)
# html.SetBackgroundColour(wx.RED)
panel_child_hox.Add(html,1,wx.EXPAND|wx.ALL,0)
child_panel.SetSizer(panel_child_hox)
self.hox.Add(child_panel,1,wx.EXPAND|wx.ALL,20)#把item下的子panel添加Sizer
if i!=0:
self.hox.Hide(child_panel)#隐藏不是第一列的item
self.all_SizerItem.append((each,child_panel))#将所有的item下的子panel添加进列表
def create_button(self):
child_panel = wx.Panel(self.panel, -1)#创建一个子panel
self.hox_button = wx.BoxSizer(wx.HORIZONTAL) # 按钮水平布局
button = wx.Button(child_panel, -1, "hello")
button1 = wx.Button(child_panel, -1, "the")
button2 = wx.Button(child_panel, -1, "world")
self.hox_button.Add(button, proportion=0, flag=wx.ALL, border=0)
self.hox_button.Add(button1, proportion=0, flag=wx.ALL, border=0)
self.hox_button.Add(button2, proportion=0, flag=wx.ALL, border=0)
child_panel.SetSizer(self.hox_button)
self.Bind(wx.EVT_BUTTON, self.Register)
self.hox.Add(child_panel,0,wx.EXPAND)#把新建的子panel添加Size
def create_Toolbar(self):
statusBar = self.CreateStatusBar()
toolbar = self.CreateToolBar()
add = toolbar.AddSimpleTool(wx.NewId(), wx.Bitmap("./pic/folder.png"), "New", "long help for 'New'")
edit = toolbar.AddSimpleTool(wx.NewId(), wx.Bitmap("./pic/folder.png"), "Edit", "long help for 'Edit'")
toolbar.Realize()
def create_Menu(self):
menuBar = wx.MenuBar()
menu1 = wx.Menu()
menuItem = menu1.Append(-1, "&Quit", "&Quit")
menuItem1 = menu1.Append(-1, "&Quit1", "&Quit1")
menuBar.Append(menu1, "&File")
self.SetMenuBar(menuBar)
def Register(self,event):
label=wx.FindWindowById(event.GetId()).GetLabelText()
for each,item in self.all_SizerItem:
if each!=label:
self.hox.Hide(item)#如果不是button label显示的item隐藏
else:
check_item=item
self.hox.Show(check_item)
self.panel.Layout()#重新布局
app=wx.PySimpleApp()
frame=Myframe()
frame.Show(True)
app.MainLoop()

wxpython tab切换页面的更多相关文章

  1. VUE 实现tab切换页面效果

    一 163邮箱登录tab切换 <!DOCTYPE html> <html lang="en"> <head> <meta charset= ...

  2. mui 登录之后tab切换页面会失灵

    我的app做完刚进去的时候底部导航栏的tab切换是正常的,但是退出之后重新登录,我在首页用reload进行了刷新,之后就引发了一些问题,tab切换有时候会失灵,登录转态的改变不成功.原来是reload ...

  3. flutter tab切换页面防止重置

    问题描述:TabBar 配合TabBarView切换页面,然后每个页面是一个listview加载数据,但是切换页面后listview的数据会被重置, 重新被加载了,解决办法使用 with Automa ...

  4. EasyUI两种动态添加tab Iframe页面的方法

    /** 动态添加tab-----方式一 **/ function addIframeTab(titleTxt,href,icon) { $('#mytabs').tabs('addIframeTab' ...

  5. echarts tab 切换问题整理

    一.bootstrap tabs 解决方案 方式一 tab切换echarts无法正常显示 https://blog.csdn.net/cjs68/article/details/78072382 ta ...

  6. tab切换echarts无法正常显示问题

    项目中使用到了Echarts来在展示图表,两个tab切换页面中都存在图表,页面加载完成后 对所有图表进行了初始化和绘制,然后切换查看时,发现图表的宽度不正确.,第一个tab显示是很正常的,但是第二个t ...

  7. uniapp使用scroll-view与swiper组件实现tab滑动切换页面需要注意的问题

    效果图: tab栏可以滑动,切换页面跟随tab栏同步滑动.这里需要注意的是使用swiper组件时,它会有一个默认的高度,你必须动态的获取数据列表的高度覆盖原来的默认高度. 下面是代码 html < ...

  8. 19 Flutter 自定义AppBar 定义顶部Tab切换 底部Tab结合顶部Tab实现类似头条页面布局(27分36秒)

    Flutter AppBar自定义顶部导航按钮图标.颜色以及TabBar定义顶部Tab切换. leading:在标题前面显示的一个控件,在首页通常显示应用的logo:在其他界面通常显示为付汇按钮. t ...

  9. 谈谈一些有趣的CSS题目(八)-- 纯CSS的导航栏Tab切换方案

    开本系列,谈谈一些有趣的 CSS 题目,题目类型天马行空,想到什么说什么,不仅为了拓宽一下解决问题的思路,更涉及一些容易忽视的 CSS 细节. 解题不考虑兼容性,题目天马行空,想到什么说什么,如果解题 ...

随机推荐

  1. Objective-C Effective 技巧

    1.除非有必要,否则不要引用头文件,一般来说应该利用@class使用前向声明,并在实现中引用头文件:如果实在无法使用,比如要声明某个类遵循一项协议,这种情况下,尽量把这条声明移到分类中,如果不行的话, ...

  2. cocos2dx内存管理的个人理解

    1.一帧开始之后的过程中,将所有执行到的autorelease的对象加入到池中:2.一帧结束之前取出池中的所有对象记作objs,清空池:3.对取出来的objs进行遍历,每个元素进行一次release: ...

  3. Kafka 0.8源码分析—ZookeeperConsumerConnector

    1.HighLevelApi High Level Api是多线程的应用程序,以Topic的Partition数量为中心.消费的规则如下: 一个partition只能被同一个ConsumersGrou ...

  4. Struts1文件上传、单文件、多文件上传【Struts1】

     将struts1文件上传的操作汇总了一下,包括单文件上传和多文件上传,内容如下,留作备忘: Struts2实现文件上传的文章(http://blog.csdn.net/itwit/article/d ...

  5. 性能秒杀log4net的NLogger日志组件(附测试代码与NLogger源码)

    NLogger特性: 一:不依赖于第三方插件和支持.net2.0 二:支持多线程高并发 三:读写双缓冲对列 四:自定义日志缓冲大小 五:支持即时触发刷盘机制 六:先按日期再按文件大小滚动Rolling ...

  6. PAT乙级 1065. 单身狗(25) by Python

    1065. 单身狗(25) 时间限制 300 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue "单身狗"是中文对 ...

  7. intellij IDEA mybatis插件破解方法

    1>安装mybatis插件,找到mybatis_plus.jar包的位置,在C:\Users\LZHL\.IntelliJIdea2016.3\config\plugins\mybatis_pl ...

  8. PHP递归遍历指定文件夹内的文件

    今天早上在地铁上看了关于文件和文件夹的一章,正好最近刚搞懂linux的文件系统,觉得对文件属性的访问跟Shell命令很像,所以想晚上来实践一下. 发现php的文件夹函数好像没有提供遍历文件夹下的所有文 ...

  9. iphone在iframe页面的宽度不受父页面影响,避免撑开页面

    工作中有个需求,就是产品页面通过iframe引用显示产品协议页,要求不要横向滑动,只需要竖向滑动,但在iphone中引用的iframe会撑开父页的宽度,而在android端浏览器这不会. <di ...

  10. [java多线程] - 锁机制&同步代码块&信号量

    在美眉图片下载demo中,我们可以看到多个线程在公用一些变量,这个时候难免会发生冲突.冲突并不可怕,可怕的是当多线程的情况下,你没法控制冲突.按照我的理解在java中实现同步的方式分为三种,分别是:同 ...