wxPython:一曲MFC的挽歌,理想主义的绝唱( 二 )
2.1桌面应用程序开发的一般流程
用wxPython写一个桌面应用程序 , 通常分为6个步骤:
第1步:导入模块
第2步:创建一个应用程序
第3步:创建主窗口
第4步:在主窗口上实现业务逻辑
第5步:显示窗主口
第6步:应用程序进入事件处理主循环
除第4步之外的其它步骤 , 基本都是一行代码就可以完成 , 第4步的复杂程度取决于功能需求的多寡和业务逻辑的复杂度 。 下面这段代码就是这个一般流程的体现 。
#第1步:导入模块importwx#第2步:创建一个应用程序app=wx.App()#第3步:创建主窗口frame=wx.Frame(None)#第4步:在主窗口上实现业务逻辑st=wx.StaticText(frame,-1,'HelloWorld')#第5步:显示窗主口frame.Show()#第6步:应用程序进入事件处理主循环app.MainLoop()2.2HelloWorld
实际应用wxPython开发桌面应用程序的的时候 , 上面这样的写法难以实现和管控复杂的业务逻辑 , 因而都是采用面向对象的应用方式 。 下面的代码演示了以OOP的方式使用wxPython , 并且为窗口增加了标题和图标 , 设置了窗口尺寸和背景色 , 同时也给静态文本控件StaticText设置了字体字号 。
importwxclassMainFrame(wx.Frame):"""从wx.Frame派生主窗口类"""def__init__(self,parent):"""构造函数"""wx.Frame.__init__(self,parent,-1,style=wx.DEFAULT_FRAME_STYLE)self.SetTitle('最简的的应用程序')self.SetIcon(wx.Icon('res/wx.ico'))#设置图标self.SetBackgroundColour((217,228,0))#设置窗口背景色self.SetSize((300,80))#设置窗口大小self.Center()#窗口在屏幕上居中st=wx.StaticText(self,-1,'HelloWorld',style=wx.ALIGN_CENTER)#生成静态文本控件 , 水平居中st.SetFont(wx.Font(20,wx.DEFAULT,wx.NORMAL,wx.NORMAL,False,'Arial'))#设置字体字号if__name__=='__main__':app=wx.App()#创建一个应用程序frame=MainFrame(None)#创建主窗口frame.Show()#显示窗主口app.MainLoop()#应用程序进入事件处理主循环代码中用到了一个.png格式的图像文件文件 , 想要运行这段代码的话 , 请先替换成本地文件 。 至于文件格式 , SetIcon方法没有限定 , 常见的包括.ico和.jpg在内的图像格式都支持 。 代码运行界面如下图所示 。
文章图片
2.3常用控件介绍
尽管wxPython的核心模块和扩展模块提供了数以百计的各式控件和组件 , 但真正常用且必不可少的控件只有为数不多的几个:
wx.Frame-窗口
wx.Panel-面板
wx.StaticText-静态文本
StaticBitmap-静态图片
wx.TextCtrl-单行或多行文本输入框
wx.Button-按钮
wx.RadioButton-单选按钮
wx.CheckBox-复选按钮
wx.Choice-下拉选择框
所有的wxPython控件都有一个不可或缺的parent参数和若干关键字参数 , 通常 , 关键字参数都有缺省默认值 。
parent-父级对象
id-控件的唯一标识符 , 缺省或-1表示自动生成
pos-控件左上角在其父级对象上的绝对位置
size-控件的宽和高
name-用户定义的控件名
style-控件风格
wxPython的控件在使用风格上保持着高度的一致性 , 一方面因为它们从一个共同的基类派生而来 , 更重要的一点 , wxPython不像PyQt那样充斥着随处可见的重载函数 。 比如 , PyQt的菜单栏QMenuBar增加菜单 , 就有addMenu(QMenu)、addMenu(str)和addMenu(QIcon,str)等三种不同的重载形式 。 方法重载固然带来了很多便利 , 但也会增加使用难度 , 让用户无所适从 。
下面的代码演示了上述常用控件的使用方法 。
importwxclassMainFrame(wx.Frame):"""从wx.Frame派生主窗口类"""def__init__(self,parent):"""构造函数"""#调用父类的构造函数 , 从默认风格中去除改变窗口大小wx.Frame.__init__(self,parent,style=wx.DEFAULT_FRAME_STYLE^wx.RESIZE_BORDER)self.SetTitle('wxPython控件演示')self.SetIcon(wx.Icon('res/wx.ico'))self.SetSize((860,450))self.Center()#创建一个面板 , 用于放置控件panel=wx.Panel(self,-1)#在x=20 , y=20的位置 , 创建静态文本控件st=wx.StaticText(panel,-1,'我是静态文本控件',pos=(20,20))#在x=300 , y=20的位置 , 创建静态图片bmp=wx.Bitmap('res/forever.png')sb=wx.StaticBitmap(panel,-1,bmp,pos=(280,10))#在x=20,y=50的位置 , 创建文本输入框 , 指定输入框的宽度为260像素 , 高度默认tc1=wx.TextCtrl(panel,-1,value='https://pcff.toutiao.jxnews.com.cn/p/20220506/我是文本输入框',pos=(20,50),size=(260,-1))#在x=20,y=90的位置 , 创建文本输入框 , 指定样式为密码tc2=wx.TextCtrl(panel,-1,value='https://pcff.toutiao.jxnews.com.cn/p/20220506/我是密码',pos=(20,90),style=wx.TE_PASSWORD)#在x=20,y=130的位置 , 创建单选按钮 , 成组的单选按钮 , 第一个需要指定样式wx.RB_GROUPrb1=wx.RadioButton(panel,-1,'单选按钮1',pos=(20,130),style=wx.RB_GROUP,name='rb1')#在x=100,y=130的位置 , 创建单选按钮 , 不再需要指定样式wx.RB_GROUPrb2=wx.RadioButton(panel,-1,'单选按钮2',pos=(100,130),name='rb2')#在x=180,y=130的位置 , 创建单选按钮 , 不再需要指定样式wx.RB_GROUPrb3=wx.RadioButton(panel,-1,'单选按钮3',pos=(180,130),name='rb3')#在x=20,y=160的位置 , 创建复选按钮cb1=wx.CheckBox(panel,-1,'复选按钮',pos=(20,160))#在x=100,y=160的位置 , 创建复选按钮 , 指定其样式为wx.ALIGN_RIGHTcb2=wx.CheckBox(panel,-1,'文字在左侧的复选按钮',pos=(100,160),style=wx.ALIGN_RIGHT)#在x=20 , y=190的位置 , 创建按钮ch=wx.Choice(panel,-1,choices=['wxPython','PyQt','Tkinter'],pos=(20,190),size=(100,-1))ch.SetSelection(0)#在x=120 , y=190的位置 , 创建按钮btn=wx.Button(panel,-1,'按钮',pos=(150,190))#在x=20 , y=230的位置 , 创建文本框 , 指定大小为260*150 , 并指定其样式为多行和只读tc3=wx.TextCtrl(panel,-1,value='https://pcff.toutiao.jxnews.com.cn/p/20220506/我是多行文本输入框',pos=(20,230),size=(260,150),style=wx.TE_MULTILINE|wx.CB_READONLY)if__name__=='__main__':app=wx.App()#创建一个应用程序frame=MainFrame(None)#创建主窗口frame.Show()#显示窗主口app.MainLoop()#应用程序进入事件处理主循环代码运行界面如下图所示 。
- 中兴超越中兴:夯实第一曲线 发力第二曲线
- 抖音回首大唐盛世千百年逢君天涯不过一瞬间一曲悠扬沧海复桑田江湖故人念是什么歌 歌曲分享
- Facebook|Facebook 大宕机:远程工作的一曲悲歌
- dns|Facebook 大宕机:远程工作的一曲悲歌
- 独家|腾讯音乐:一曲肝肠断,美股何处觅知音?
- 抖音江上一曲低诵晚风唱出心伤才知情浓鸳鸯离散谁知其中饱尝辛酸谁人能懂是什么歌 歌曲分享