自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm=1001.2014.3001.5501
使用wxPython之前,先来了解两个基础对象:应用程序对象和顶级窗口。
应用程序对象管理主事件循环,主事件循环是wxPython程序的动力。如果没有应用程序对象,wxPython应用程序将不能运行。
顶级窗口通常用于管理最重要的数据,控制并呈现给用户。
图3显示了这两个基础对象和应用程序的其他部分之间的关系。
图3 wxPython应用的基本结构
在图3中,这个应用程序对象拥有顶级窗口和主循环事件。顶级窗口管理其窗口中的组件和其他的分配给它的数据对象。窗口和它的组件触发的事件基于用户的动作,并接受事件通知以便改变显示。
1 创建一个wx.App的子类
在开始创建应用程序之前,先来创建一个没有任何功能的子类。创建和使用一个wx.App子类,需要执如下4个步骤:
l 定义这个子类。
l 在定义的子类中写一个OnInit()初始化方法。
l 在程序的主要部分创建这个类的一个实例。
l 调用应用程序实例的MainLoop()方法。这个方法将程序的控制权转交给wxPython。
创建一个没有任何功能的子类,具体代码如下:
# -*- coding:utf-8 -*-
import wx # 导入wxPython
class App(wx.App):
# 初始化方法
def OnInit(self):
frame = wx.Frame(parent=None, title='Hello wyPython') # 创建窗口
frame.Show() # 显示窗口
return True # 返回值
if __name__ == '__main__':
app = App() # 创建App类的实例
app.MainLoop() # 调用App类的MainLoop()主循环方法
上述代码中,定义了一个子类App(),它继承父类wx.App,子类中包含一个初始化方法OnInit()。在主程序中创建类的实例,然后调用MainLoop()主循环方法。运行结果如图4所示。
图4 创建子类
2 直接使用wx.App
通常,如果在系统中只有一个窗口的话,可以不创建wx.App子类,直接使用wx.App。这个类提供了一个最基本的OnInit()初始化方法,具体代码如下:
# -*- coding:utf-8 -*-
import wx # 导入wxPython
app = wx.App() # 初始化wx.App类
frame = wx.Frame(None,title='Hello wyPython') # 定义了一个顶级窗口
frame.Show() # 显示窗口
app.MainLoop() # 调用wx.App类的MainLoop()主循环方法
上述代码中,wx.App()初始化wx.App类,包含了OnInit()方法,运行结果与图4相同。
3 使用wx.Frame框架
在GUI中框架通常也称为窗口。框架是一个容器,用户可以将它在屏幕上任意移动,并可对它进行缩放,它通常包含标题栏、菜单等。在wxPython中,wx.Frame是所有框架的父类。当你创建wx.Frame的子类时,子类应该调用其父类的构造器wx.Frame.__init__()。wx.Frame构造器的语法格式如下:
wx.Frame(parent, id=-1, title="", pos=wx.DefaultPosition, size=wx.DefaultSize,
style=wx.DEFAULT_FRAME_STYLE, name="frame")
参数说明:
l parent:框架的父窗口。如果是顶级窗口,这个值是None。
l id:关于新窗口的wxPython ID号。通常设为-1,让wxPython自动生成一个新的ID。
l title:窗口的标题。
l pos:一个wx.Point对象,它指定这个新窗口的左上角在屏幕中的位置。在图形用户界面程序中,通常(0,0)是显示器的左上角。这个默认值(-1,-1)将让系统决定窗口的位置。
l size:一个wx.Size对象,它指定这个窗口的初始尺寸。这个默认值(-1,-1)将让系统决定窗口的初始尺寸。
l style:指定窗口的类型的常量。可以使用或运算来组合它们。
l name:框架内在的名字。可以使用它来寻找这个窗口。
创建wx.Frame子类的代码如下:
# -*- coding:utf-8 -*-
import wx # 导入wxPython
class MyFrame(wx.Frame):
def __init__(self,parent,id):
wx.Frame.__init__(self,parent,id, title="创建Frame",pos=(100, 100), size=(300, 300))
if __name__ == '__main__':
app = wx.App() # 初始化应用
frame = MyFrame(parent=None,id=-1) # 实例MyFrame类,并传递参数
frame.Show() # 显示窗口
app.MainLoop() # 调用MainLoop()主循环方法
上述代码中,在主程序中调用MyFrame类,并且传递2个参数。在MyFrame类中,自动执行__init__()初始化方法,接收参数。然后调用父类wx.Frame的__init__()初始化方法,设置顶级窗口的相关属性。运行结果如图5所示。
图5 使用wx.Frame框架