wxPython:一曲MFC的挽歌,理想主义的绝唱( 四 )
文章图片
3.2.栅格布局顾名思义 , 栅格布局就是将布局空间划分成网格 , 将控件放置到不同的网格内 。 栅格布局比较简单 , 用起来非常方便 。 栅格布局布局管理器也有很多种 , GridBagSizer是最常用的一种 。 下面是一个使用GridBagSizer实现栅格布局的例子 。
importwxclassMainFrame(wx.Frame):"""从wx.Frame派生主窗口类"""def__init__(self,parent):"""构造函数"""wx.Frame.__init__(self,parent,style=wx.DEFAULT_FRAME_STYLE)self.SetTitle('栅格布局')self.SetIcon(wx.Icon('res/wx.ico'))self.SetSize((800,440))#设置窗口大小self._init_ui()#初始化界面self.Center()#窗口在屏幕上居中def_init_ui(self):"""初始化界面"""panel=wx.Panel(self,-1)#创建容器面板sizer=wx.GridBagSizer(10,10)#每个控件之间横纵间隔10像素st=wx.StaticText(panel,-1,"用户名")sizer.Add(st,(0,0),flag=wx.TOP|wx.ALIGN_RIGHT,border=20)#在第0行0列 , 距离上边缘20像素 , 右对齐userName=wx.TextCtrl(panel,-1)sizer.Add(userName,(0,1),(1,3),flag=wx.EXPAND|wx.TOP,border=20)#在第0行1列 , 跨3列 , 距离上边缘20像素sb=wx.StaticBitmap(panel,-1,wx.Bitmap('res/python.jpg'))sizer.Add(sb,(0,5),(7,1),flag=wx.TOP|wx.RIGHT,border=20)#在第0行4列 , 跨7行 , 距离上右边缘20像素st=wx.StaticText(panel,-1,"密码")sizer.Add(st,(1,0),flag=wx.ALIGN_RIGHT)#在第1行0列 , 右对齐password=wx.TextCtrl(panel,-1,style=wx.TE_PASSWORD)sizer.Add(password,(1,1),(1,3),flag=wx.EXPAND)#在第1行1列 , 跨3列st=wx.StaticText(panel,-1,"学历")sizer.Add(st,(2,0),flag=wx.ALIGN_RIGHT)#在第2行0列 , 右对齐level1=wx.RadioButton(panel,-1,"专科")sizer.Add(level1,(2,1))#在第2行1列level2=wx.RadioButton(panel,-1,"本科")sizer.Add(level2,(2,2))#在第2行1列level3=wx.RadioButton(panel,-1,"研究生及以上")sizer.Add(level3,(2,3))#在第2行1列st=wx.StaticText(panel,-1,"职业")sizer.Add(st,(3,0),flag=wx.ALIGN_RIGHT)#在第3行0列 , 右对齐professional=wx.Choice(panel,-1,choices=["学生","程序员","软件工程师","系统架构师"])professional.SetSelection(0)sizer.Add(professional,(3,1),(1,3),flag=wx.EXPAND)#在第3行1列 , 跨3列#语言技能st=wx.StaticText(panel,-1,"语言技能")sizer.Add(st,(4,0),flag=wx.ALIGN_RIGHT|wx.LEFT,border=20)#在第4行0列 , 距离左边缘20像素 , 右对齐choices=["C","C++","Java","Python","Lua","JavaScript","TypeScript","Go","Rust"]language=wx.ListBox(panel,-1,choices=choices,style=wx.LB_EXTENDED)sizer.Add(language,(4,1),(1,3),flag=wx.EXPAND)#在第4行1列 , 跨3列isJoin=wx.CheckBox(panel,-1,"已加入QQ群",style=wx.ALIGN_RIGHT)sizer.Add(isJoin,(5,0),(1,4),flag=wx.ALIGN_CENTER)#在第5行0列 , 跨4列,居中btn=wx.Button(panel,-1,"提交")sizer.Add(btn,(6,0),(1,4),flag=wx.ALIGN_CENTER|wx.BOTTOM,border=20)#在第6行0列 , 跨4列,居中sizer.AddGrowableRow(4)#设置第4行可增长sizer.AddGrowableCol(3)#设置第3列可增长panel.SetSizer(sizer)panel.Layout()if__name__=='__main__':app=wx.App()frame=MainFrame(None)frame.Show()app.MainLoop()代码运行界面如下图所示 。
文章图片
事件驱动
一个桌面程序不单是控件的罗列 , 更重要的是对外部的刺激——包括用户的操作做出反应 。 如果把窗体和控件比作是桌面程序的躯体 , 那么响应外部刺激就是它的灵魂 。 wxPython的灵魂是事件驱动机制:当某事件发生时 , 程序就会自动执行预先设定的动作 。
4.1事件
所谓事件 , 就是我们的程序在运行中发生的事儿 。 事件可以是低级的用户动作 , 如鼠标移动或按键按下 , 也可以是高级的用户动作(定义在wxPython的窗口部件中的) , 如单击按钮或菜单选择 。 事件可以产生自系统 , 如关机, , 也可以由用户自定义事件 。
除了用户自定义事件 , 在wxPython中我习惯把事件分为4类:
- 中兴超越中兴:夯实第一曲线 发力第二曲线
- 抖音回首大唐盛世千百年逢君天涯不过一瞬间一曲悠扬沧海复桑田江湖故人念是什么歌 歌曲分享
- Facebook|Facebook 大宕机:远程工作的一曲悲歌
- dns|Facebook 大宕机:远程工作的一曲悲歌
- 独家|腾讯音乐:一曲肝肠断,美股何处觅知音?
- 抖音江上一曲低诵晚风唱出心伤才知情浓鸳鸯离散谁知其中饱尝辛酸谁人能懂是什么歌 歌曲分享