wxPython学习(2.wxPython类层次结构和第一个wxPython程序)
wxPython基础
作为图形用户界面开发工具包,主要提供了如下GUI内容:
1.窗口(一个容器,容纳其他控件)
2.控件
3.事件处理
4.布局管理
wxPython类层次结构
wxPython界面构建层次结构
frame(顶级窗口)-->菜单栏
-->Panel(内容面板)-->StaticText(标签)
-->...(其他子控件)
(顶级窗口中上面放置菜单栏ToolBar,下面放内容面板Panel,面板中还可以包含其他面板)
(菜单栏不放在内容面板中,内容面板主要放一些其他控件)
parent参数指向其父容器,即将其放在什么容器中,体现一种包含关系,而不是继承关系
(参考下面程序3.使用面板)
第一个wxPython程序
1.步骤
#(1)引入wx模块
import wx
#(2)创建应用程序对象
app = wx.App()
#(3)创建窗口对象
frm = wx.Frame(None,title="第一个GUI程序",size=(400,300),pos=(100,100))
#pos位置,size窗口大小,title标题
#(4)显示窗口
frm.Show()
#(5)进入主事件循环(一种事件处理机制,大部分只有将当前应用程序放到主事件循环中才能展示界面,响应事件)
app.MainLoop()
2.自定义窗口类MyFrame
代码:
import wx
#自定义窗口类MyFrame
class MyFrame(wx.Frame):
def __init__(self):
super().__init__(parent=None,title="第一个GUI程序",size=(400,300),pos=(100,100))
#自定义frame,然后让它继承wxFrame,并提供构造方法
#应用程序对象自定义,可以捕获应用程序生命周期
class App(wx.App):
def OnInit(self):
#创建窗口对象
frame = MyFrame()
frame.Show()
return True
def OnExit(self):
print('应用程序退出')
return 0
#当前模块名是不是主模块,即应用程序的入口
if __name__ == '__main__':
app = App()#调用上面函数
app.MainLoop()#进入主事件循环
#上面没有放一个容器进去
3.使用面板
代码:
import wx
#自定义窗口类MyFrame
class MyFrame(wx.Frame):
def __init__(self):
super().__init__(parent=None,title="第一个GUI程序",size=(400,300),pos=(100,100))
#自定义frame,然后让它继承wxFrame,并提供构造方法
self.Centre()#设置窗口居中
#在frame中放一个面板,把其他控件和窗口放到面板中去
panel = wx.Panel(parent=self)
#把面板添加到某一个容器/窗口中,就让parent指向谁。parent为父容器/父窗口,self为当前的frame
statictext = wx.StaticText(parent=panel,label='hello world',pos=(10,10))
#放一个静态文本框,相当于label,放到panel中,所以parent=panel,pos为位置
#应用程序对象自定义,可以捕获应用程序生命周期
class App(wx.App):
def OnInit(self):
#创建窗口对象
frame = MyFrame()
frame.Show()
return True
def OnExit(self):
print('应用程序退出')
return 0
#当前模块名是不是主模块,即应用程序的入口
if __name__ == '__main__':
app = App()#调用上面函数
app.MainLoop()#进入主事件循环