总目录:wxPython教程目录 本节内容:wxPython 例子 样例 本节译自:zetCode 上一篇:wxpython教程(一): wxPython简介 下一篇:wxpython教程(三): 菜单与工具栏
在这一部分,我们将创建一些简单的wxPython例子。
简单例子
从简单例子开始,我们的脚本将新建一些简单窗口。没有太多的东西,我们将一行一行的分析下面这段脚本:
#!/usr/bin/python # simple.py import wx app = wx.App() frame = wx.Frame(None, -1, 'simple.py') frame.Show() app.MainLoop()
这是我们的第一个wxPython例子,首先来看看前两行。
#!/usr/bin/python # simple.py
第一行首先是一个she-bang符号,即#!,后面紧跟着Python解释器的路径。第二行是一句注释,表明了该脚本的名字。
import wx
这一行导入了wxPython的基本模块,即上一节提到的core、controls、gdi、misc和windows模块。wx是一个命名空间,所有来自于基本模块的函数和对象都以wx打头。
app = wx.App()
这一行新建了一个应用对象(application object),所有的wxPython程序必须有一个应用对象。
frame = wx.Frame(None, -1, 'simple.py') frame.Show()
这里我们新建了wx.Frame对象。构造函数的各参数意义:父类=None,id=-1,title=’simple.py’。wx.Frame对象是一种重要的容器widget,随后我们将详细分析它。wx.Frame是其他widgets的父类,它自身并没有父类,所以在widgets层级中属于一种顶级widget。id可设置为-1,或wxPython的一些常量,后文会提到。title即窗口的标题。在新建wx.Frame widget之后,我们必须调用Show()函数才能使其显示在屏幕上。
app.MainLoop()
最后一行使当前应用进入主循环。主循环是一个无限循环,它捕获、分发应用生命周期中的所有事件。
以上是一个非常简单的例子,但我们得到的窗口仍然有很多功能。比如改变大小、最大化、最小化等。这些功能需要很多的代码,但这些都默认由wxPython提供,我们也无需重新造轮子。
图:简单例子的结果
wx.Frame
wx.Frame是wxPython中最重要的widgets,它是一种容器widgets,可以容纳其他widgets。事实上,wx.Frame可以容纳任何除了frame和dialog的window部件。wx.Frame包含一个标题栏、边框和一个中间的容器区域,其中标题栏和边框是可选的,通过设置不同的标记可以去掉。
wx.Frame的构造函数如下:
wx.Frame(wx.Window parent, int id=-1, string title='', wx.Point pos = wx.DefaultPosition, wx.Size size = wx.DefaultSize, style = wx.DEFAULT_FRAME_STYLE, string name = "frame")
构造函数有7个参数。第一个参数没有默认值,其他六个都有。有四个参数为可选参数,前三个为强制的。
wx.DEFAULT_FRAME_STYLE包含一系列的默认Flags,这些Flag可以设置窗口的样式,比如wx.MINIMIZE_BOX | wx.MAXIMIZE_BOX | wx.RESIZE_BORDER | wx.SYSTEM_MENU | wx.CAPTION | wx.CLOSE_BOX | wx.CLIP_CHILDREN。竖线将不同的Flag联合起来。下面是一个简短的例子:
#!/usr/bin/python # nominimizebox.py import wx app = wx.App() window = wx.Frame(None, style=wx.MAXIMIZE_BOX | wx.RESIZE_BORDER | wx.SYSTEM_MENU | wx.CAPTION | wx.CLOSE_BOX) window.Show(True) app.MainLoop()
我们想得到一个没有最小化按钮的窗口,所以我们在style参数的设置中没有加wx.MINIMIZE_BOX这个参数。
图:没有最小化按钮框的窗口
大小和位置
我们可以通过两种方式定义应用的大小。在widget的构造函数中,有一个参数size可以设定。或者我们可以调用SetSize()方法。
#!/usr/bin/python # -*- coding: utf-8 -*- # size.py import wx class Example(wx.Frame): def __init__(self, parent, title): super(Example, self).__init__(parent, title=title, size=(250, 200)) self.Show() if __name__ == '__main__': app = wx.App() Example(None, title='Size') app.MainLoop()
在上面这个例子中,应用的大小为250x200px。我们是在构造函数中定义这一参数的。
相似地,我们也可以对我们的应用再屏幕上进行定位。默认情况下,窗口被放置在屏幕的左上角,但不同操作系统或者窗口管理系统可能存在不同。程序员可在程序代码中设定窗口位置。我们已经在wx.Frame的构造函数中看到了pos参数,通过它我们可以指定窗口的位置。
同时,有几种方法可以设定窗口位置,如下所示。
Method | Description |
---|---|
Move(wx.Point point) | 将窗口移动到指定位置 |
MoveXY(int x, int y) | 将窗口移动到指定位置 |
SetPosition(wx.Point point) | 设定窗口位置 |
SetDimensions(x, y, width, height, sizeFlags) | 设定窗口位置和大小 |
下面是一个具体的例子:
#!/usr/bin/python # -*- coding: utf-8 -*- # move.py import wx class Example(wx.Frame): def __init__(self, parent, title): super(Example, self).__init__(parent, title=title, size=(300, 200)) self.Move((800, 250)) self.Show() if __name__ == '__main__': app = wx.App() Example(None, title='Move') app.MainLoop()
如果我们想最大化我们的程序,需要将窗口放置在(0,0)的坐标位置,然后让窗口占满整个屏幕。使用Maximize()函数可以将wx.Frame最大化。
在屏幕中央
如果我们想将应用再屏幕中居中,wxPython已经有很方便的方法,直接调用Centre()方法就可以做到,且无需手动计算屏幕的宽度和高度。
#!/usr/bin/python # -*- coding: utf-8 -*- # center.py import wx class Example(wx.Frame): def __init__(self, parent, title): super(Example, self).__init__(parent, title=title, size=(300, 200)) self.Centre() self.Show() if __name__ == '__main__': app = wx.App() Example(None, title='Center') app.MainLoop()
在这个例子中,我们将一个小窗口居中在屏幕当中。
self.Centre()
上面就是居中窗口的方法调用。
在本节中,我们写了wxPython的简单代码样例,让读者能够快速的上手wxPython。