许多IM软件登录界面如图图1所示,点击“服务器设置”按钮,面板展开,服务器部分显示出来,如图2所示;再点击“服务器设置”按钮,面板折叠,服务器部分隐藏起来,回到图1。~本文由三思之旅原创,转载请注明出处http://think3t.iteye.com~
图1 面板折叠
图2 面板展开
下面介绍一下如何用wxPython实现这种效果。使用wxPython实现这种效果,关键是使用wx.BoxSizer管理整个面板,然后使用wx.BoxSizer类的Hide()、Show()方法将相应的控件隐藏或者显示出来。
def OnTouch(self, event):
if self.isShown: #如果当前控件已显示
self.setserverBtn.SetLabel(u'服务器设置↓') #更新按钮标签
self.sizer.Hide(self.sbsizer) #隐藏服务器设置部分
self.isShown = False #服务器设置部分当前已隐藏
self.SetClientSize((330,118)) #更新面板尺寸
else:
self.sizer.Show(self.sbsizer) #如果当前控件已隐藏
self.setserverBtn.SetLabel(u'服务器设置↑') #更新按钮标签
self.isShown = True #服务器设置部分当前已显示
self.SetClientSize((330,200)) #更新面板尺寸
self.sizer.Layout() #关键所在,强制sizer重新计算并布局sizer中的控件
代码中的self.sbsizer是用来管理服务器设置部分的StaticBoxSizer。从以上代码可以总结出实现面板折叠与展开的方法如下:
1. 使用BoxSizer管理控件布局;
2. 使用Hide()/Show()函数将控件隐藏/显示;
3. 更新面板尺寸;
4. 使用BoxSizer的Layout()函数,强制Sizer重绘。
下面给出实现文章开头部分界面的完整代码供大家参考。当然,方法肯定不是唯一的,目前就想到这种方法,感觉也不复杂,所以写出来分享一下,欢迎大家前来评论~鲜花、鸡蛋都砸过来吧~~
#! /usr/bin/env python
#coding=utf-8
import wx
class MyFrame(wx.Frame):
def __init__(self, parent=None, title=u'折叠与展开'):
wx.Frame.__init__(self, parent, -1, title=title)
self.panel = wx.Panel(self, style=wx.TAB_TRAVERSAL | wx.CLIP_CHILDREN | wx.FULL_REPAINT_ON_RESIZE)
#增加一些控件:用户名密码部分,并使用GridBagSizer来管理这些控件
self.label1=wx.StaticText(self.panel,-1,label=u'用户名:')
self.label2=wx.StaticText(self.panel,-1,label=u'密 码:')
self.userText=wx.TextCtrl(self.panel,-1,size=(200,25))
self.passText=wx.TextCtrl(self.panel,-1,size=(200,25))
self.rempassCheck=wx.CheckBox(self.panel,-1,label=u'记住密码')
self.autologCheck=wx.CheckBox(self.panel,-1,label=u'自动登录')
self.gbsizer1=wx.GridBagSizer(hgap=10, vgap=10)
self.gbsizer1.Add(self.label1,pos=(0,0),span=(1,1),flag=wx.ALIGN_RIGHT|wx.ALIGN_CENTRE_VERTICAL)
self.gbsizer1.Add(self.userText,pos=(0,1),span=(1,1),flag=wx.EXPAND)
self.gbsizer1.Add(self.label2,pos=(1,0),span=(1,1),flag=wx.ALIGN_RIGHT|wx.ALIGN_CENTRE_VERTICAL)
self.gbsizer1.Add(self.passText,pos=(1,1),span=(1,1),flag=wx.EXPAND)
self.gbsizer1.Add(self.rempassCheck,pos=(2,0),span=(1,1),flag=wx.ALIGN_RIGHT|wx.ALIGN_CENTRE_VERTICAL)
self.gbsizer1.Add(self.autologCheck,pos=(2,1),span=(1,1),flag=wx.ALIGN_CENTER|wx.ALIGN_CENTRE_VERTICAL)
#增加一些控件:服务器设置部分,并使用GridBagSizer来管理这些控件,
#然后再使用StaticBoxSizer管理GridBagSizer
self.label3=wx.StaticText(self.panel,-1,label=u'地址:')
self.label4=wx.StaticText(self.panel,-1,label=u'端口:')
self.ipadText=wx.TextCtrl(self.panel,-1,size=(170,25))
self.portText=wx.TextCtrl(self.panel,-1,size=(170,25))
self.proxyBtn=wx.Button(self.panel,-1,label=u'代理\n设置')
self.gbsizer2=wx.GridBagSizer(hgap=10,vgap=10)
self.gbsizer2.Add(self.label3,pos=(0,0),span=(1,1),flag=wx.ALIGN_RIGHT|wx.ALIGN_CENTRE_VERTICAL)
self.gbsizer2.Add(self.ipadText,pos=(0,1),span=(1,1),flag=wx.EXPAND)
self.gbsizer2.Add(self.proxyBtn,pos=(0,2),span=(2,1),flag=wx.EXPAND)
self.gbsizer2.Add(self.label4,pos=(1,0),span=(1,1),flag=wx.ALIGN_RIGHT|wx.ALIGN_CENTRE_VERTICAL)
self.gbsizer2.Add(self.portText,pos=(1,1),span=(1,1),flag=wx.EXPAND)
sbox=wx.StaticBox(self.panel,-1,label=u'服务器')
self.sbsizer=wx.StaticBoxSizer(sbox,wx.VERTICAL)
self.sbsizer.Add(self.gbsizer2,proportion=0,flag=wx.EXPAND,border=10)
#增加一些控件:最下方的按钮,并使用水平方向的BoxSizer来管理这些控件
self.setserverBtn=wx.Button(self.panel,-1,label=u'服务器设置↓')
self.loginBtn=wx.Button(self.panel,-1,label=u'登录')
self.cancelBtn=wx.Button(self.panel,-1,label=u'取消')
self.bsizer=wx.BoxSizer(wx.HORIZONTAL)
self.bsizer.Add(self.setserverBtn,1,flag=wx.EXPAND)
self.bsizer.Add(self.loginBtn)
self.bsizer.Add(self.cancelBtn)
#给"服务器设置"按钮绑定事件处理器
self.Bind(wx.EVT_BUTTON, self.OnTouch, self.setserverBtn)
#增加BoxSizer,管理用户名密码部分的gbsizer1,
#服务器设置部分的sbsizer,以及最下方的bsizer
self.sizer = wx.BoxSizer(wx.VERTICAL)
self.sizer.Add(self.gbsizer1, 0, wx.EXPAND, 20)
self.sizer.Add(self.sbsizer, 0, wx.EXPAND, 20)
self.sizer.Add(self.bsizer, 0, wx.EXPAND, 20)
self.isShown = False #用这个变量指示当前是否已将控件隐藏
self.sizer.Hide(self.sbsizer) #将控件隐藏
self.SetClientSize((330,118)) #更改面板尺寸
self.panel.SetSizerAndFit(self.sizer)
self.sizer.SetSizeHints(self.panel)
def OnTouch(self, event):
if self.isShown: #如果当前控件已显示
self.setserverBtn.SetLabel(u'服务器设置↓') #更新按钮标签
self.sizer.Hide(self.sbsizer) #隐藏服务器设置部分
self.isShown = False #服务器设置部分当前已隐藏
self.SetClientSize((330,118)) #更新面板尺寸
else:
self.sizer.Show(self.sbsizer) #如果当前控件已隐藏
self.setserverBtn.SetLabel(u'服务器设置↑') #更新按钮标签
self.isShown = True #服务器设置部分当前已显示
self.SetClientSize((330,200)) #更新面板尺寸
self.sizer.Layout() #关键所在,强制sizer重新计算并布局sizer中的控件
if __name__ == "__main__":
app = wx.PySimpleApp()
frame = MyFrame(None)
frame.Show(True)
app.MainLoop()
~本文由三思之旅原创,转载请注明出处http://think3t.iteye.com~
- 大小: 14.1 KB
- 大小: 20.1 KB
分享到:
相关推荐
用WxPython实现Sqlite3 里的数据管理通用界面,简单实现 查询,修改、新增、删除记录。 介绍可以看博客 https://blog.csdn.net/seakingx/article/details/93050958
下面我们将深入探讨如何使用WxPython来实现无边框界面。 首先,我们需要导入必要的模块,即`wx`: ```python import wx ``` 接下来,定义一个继承自`wx.Frame`的类,`wx.Frame`是WxPython中的基础窗口类,用于...
在标题和描述中提到的两个实例,主要展示了如何使用WxPython来实现两种特殊效果:无边框窗体和透明窗体。 1. **无边框窗体**: 在Python中,通过WxPython库创建一个无边框窗体可以使得窗体没有默认的标题栏和边框...
本教程将深入探讨如何使用wxPython实现Frame界面的跳转,特别关注登录页面的功能实现。 首先,理解Frame是wxPython中的一个基础类,它相当于窗口或对话框。在构建应用程序时,我们通常会创建一个主Frame作为程序的...
“豆瓣电台客户端,使用wxpython实现”这一标题揭示了我们要讨论的是一个专为Windows操作系统设计的豆瓣电台应用,它基于Python的GUI库wxpython进行开发。wxPython是一个流行的Python库,用于创建跨平台的图形用户...
wxPython的wxAuiNotebook实现Tab页效果
标题中的“wxpython实现程序最小到系统托盘的实例”是指使用Python的wxPython库来创建一个应用程序,该程序能够最小化到系统托盘区域,而不是传统的任务栏。这是一个非常实用的功能,允许用户将程序隐藏起来,而不会...
本篇文章将详细介绍如何使用wxPython实现按钮切换界面的功能。首先,我们需要了解wxPython的基础知识,它是Python的一个绑定库,用于创建跨平台的图形用户界面(GUI)。它基于C++的wxWidgets库,提供了与操作系统...
本文档介绍的是如何使用Python的wxpython库构建一个简单的图书管理系统,并结合MySQL数据库进行数据存储。wxpython是Python中一个用于创建GUI应用的库,它提供了丰富的控件和组件,使得开发者能够方便地构建用户界面...
使用wxpython模块,结合random模块,以及Python的类和函数相关知识实现
《wxPython in Action 活学活用wxPython》是一本深入浅出的教程,旨在帮助读者掌握使用wxPython这一强大的GUI(图形用户界面)工具包进行Python编程的方法。wxPython是Python编程语言中用于创建桌面应用的一个流行库...
在具体实现wxPython的多窗口程序时,需要注意的是,每个窗口通常有其自己的任务和状态,开发者需要合理地管理它们的生命周期和状态同步。另外,多窗口应用程序会面临布局管理的问题,开发者需要根据窗口大小和内容来...
《活学活用wxPython》这本书旨在帮助读者全面掌握wxPython的使用方法,无论是新手还是有一定经验的开发者都能从中受益。书中的章节按功能组织,便于读者快速定位所需内容。 - **第一章:欢迎使用wxPython** - 介绍...
wxPython的出现弥补了这一不足,使得开发者能够用Python编写出快速、易于编写的GUI应用,并且无需修改就能跨平台运行。 【移植性】是wxPython的一大亮点。与Java相比,虽然Java也强调跨平台,但Java虚拟机的大小和...
本文实例讲述了wxPython框架类和面板类的使用方法,分享给大家供大家参考。具体分析如下: 实现代码如下: import wx class MyApp(wx.App): #自定义应用程序类,类中调用自定义的框架类 def OnInit(self): self....
wxPython兼容多种操作系统,包括Windows、Linux和macOS,因此,用wxPython开发的程序可以在多个平台上运行,无需进行大的修改。 **wxPython-demo-4.0.3.tar** 这个压缩包`wxPython-demo-4.0.3.tar`包含了wxPython...
使用了Python、wxPython、PySerial、线程、图片内嵌等多种实用GUI编程技术,且单文件实现,简单易懂,可以作为学习GUI编程的一个很好的例程,也可以作为自己实现更完整串口助手功能的起点!!!