最近没事学习下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. Flex timer使用 keydown事件注册到stage

    Flex timer使用 keydown事件注册到stage: <?xml version="1.0" encoding="utf-8"?> < ...

  2. SVG在网页中的四种使用方式

    1,直接打开simple.svg <svg xmlns="http://www.w3.org/2000/svg" width="200" height=& ...

  3. LeetCode Database题解

    175. Combine Two Tables 使用外连接即可. # Write your MySQL query statement below select FirstName, LastName ...

  4. 浅谈Socket长连+多线程[原创,欢迎指点]

    前戏 [PS:原文手打,转载说明出处] [PS:博主自认为适用于云平台设备管控,且适用于IM主控] 好久没来了,13年时还想着多写一些博客,这都17年过年,年前也写一写Scoket+多线程,不足之处, ...

  5. DailyTick 开发实录 —— UI 设计

    上次的文章中描述了 DailyTick 的设计理念.经过两周左右的设计和开发,现在 DailyTick 的主要 UI 已经完成了原型的设计和初步的实现.既然是原型,当然看起来就有点粗糙. 主 UI 主 ...

  6. easyui帮助文档地址

    http://www.jeasyui.com/documentation/index.php# http://www.jeasyui.net/tutorial/22.html http://www.j ...

  7. ADO.NET 数据库操作类

    操作数据类 避免代码重用.造对象太多.不能分工开发 利用面向对象的方法,把数据访问的方式优化一下,利用封装类   一般封装成三个类: 1.数据连接类 提供数据连接对象 需要引用命名空间: using ...

  8. java_ 集合

    集合类说明及区别Collection├List│├LinkedList│├ArrayList│└Vector│ └Stack└SetMap├Hashtable├HashMap└WeakHashMap ...

  9. iOS 开发之Block

    iOS 开发之Block 一:什么是Block.Block的作用 UI开发和网络常见功能的实现回调,按钮事件的处理方法是回调方法. 1.     按钮事件 target action 机制. 它是将一 ...

  10. bzoj1492--斜率优化DP+cdq分治

    显然在某一天要么花完所有钱,要么不花钱. 所以首先想到O(n^2)DP: f[i]=max{f[i-1],(f[j]*r[j]*a[i]+f[j]*b[i])/(a[j]*r[j]+b[j])},j& ...