在 wxPython 教程的这一部分中,我们将创建一些简单的示例。
简单的例子
我们从一个非常简单的例子开始。 我们的第一个脚本只会显示一个小窗口。
它不会做太多。 我们将逐行分析脚本。
simple.py
#!/usr/bin/env python3# -*- coding: utf-8 -*-# simple.pyimport wxapp = wx.App()frame = wx.Frame(None, title='Simple application')frame.Show()app.MainLoop()
这是我们在 wxPython 中的第一个示例。
#!/usr/bin/env python3# -*- coding: utf-8 -*-# simple.py
第一行是 she-bang,后面是通往 Python 解释器的路径。 第二行是一个魔术注释,它指定了源代码的编码。 第四行是提供脚本名称的注释。
import wx
此行导入基本的 wxPython 模块。 即核心,控件,GDI,杂项和 windows。 从技术上讲,wx是一个名称空间。 基本模块中的所有功能和对象都将以wx.前缀开头。 下一行代码将创建一个应用对象。
app = wx.App()
每个 wxPython 程序必须具有一个应用对象。
frame = wx.Frame(None, title='Simple application')frame.Show()
在这里,我们创建一个wx.Frame对象。 wx.Frame小部件是重要的容器小部件。 稍后我们将详细分析此小部件。 wx.Frame小部件是其他小部件的父级小部件。 它本身没有父级。 如果为父参数指定None,则表明我们的小部件没有父项。 它是小部件层次结构中的顶部小部件。 创建wx.Frame小部件后,必须调用Show()方法才能将其实际显示在屏幕上。
app.MainLoop()
最后一行进入主循环。 主循环是一个无休止的循环。 它捕获并调度应用生命周期内存在的所有事件。
这是一个非常简单的例子。 尽管如此简单,我们仍然可以在此窗口中做很多事情。 我们可以调整窗口大小,最大化,最小化。 此功能需要大量编码。 wxPython 工具箱默认隐藏了所有这些内容并提供了这些内容。 没有理由重新发明轮子。

图:简单 example
框架
wx.Frame小部件是 wxPython 中最重要的小部件之一。 这是一个容器小部件。 这意味着它可以包含其他小部件。 实际上,它可以包含不是框架或对话框的任何窗口。 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")
构造器有七个参数。 第一个参数没有默认值。 其他六个参数确实具有。 这四个参数是可选的。 前三个是强制性的。
wx.DEFAULT_FRAME_STYLE是一组默认标志:wx.MINIMIZE_BOX | wx.MAXIMIZE_BOX | wx.RESIZE_BORDER wx.SYSTEM_MENU | wx.CAPTION | wx.CLOSE_BOX | wx.CLIP_CHILDREN。 通过组合各种样式,我们可以更改wx.Frame小部件的样式。
no_minimize.py
#!/usr/bin/env python3# -*- coding: utf-8 -*-# no_minimize.pyimport wxapp = wx.App()frame = wx.Frame(None, style=wx.MAXIMIZE_BOX | wx.RESIZE_BORDER| wx.SYSTEM_MENU | wx.CAPTION | wx.CLOSE_BOX)frame.Show(True)app.MainLoop()
我们的意图是显示一个没有最小化框的窗口。 因此,我们没有在style参数中指定此标志。
大小和位置
我们可以通过两种方式指定应用的大小。 我们的小部件的构造器中有一个size参数,或者我们可以调用SetSize()方法。
set_size.py
#!/usr/bin/env python3# -*- coding: utf-8 -*-# set_size.pyimport wxclass Example(wx.Frame):def __init__(self, parent, title):super(Example, self).__init__(parent, title=title,size=(350, 250))def main():app = wx.App()ex = Example(None, title='Sizing')ex.Show()app.MainLoop()if __name__ == '__main__':main()
在此示例中,应用的大小为250x200像素。
def __init__(self, parent, title):super(Example, self).__init__(parent, title=title,size=(350, 250))
在构造器中,我们将wx.Frame小部件的宽度设置为 350px。 小部件的高度为 250 像素。
同样,我们可以将应用放置在屏幕上。 默认情况下,窗口位于屏幕的左上角。 但是在各种 OS 平台甚至窗口管理器上,它可能都不同。 一些窗口管理器自己放置应用窗口。 他们中的一些人做了一些优化,以使窗口不会重叠。 程序员可以以编程方式定位窗口。 我们已经在wx.Frame小部件的构造器中看到了pos参数。 通过提供默认值以外的其他值,我们可以自己控制位置。
| 方法 | 描述 |
|---|---|
Move(wx.Point point) |
将窗口移至指定位置 |
MoveXY(int x, int y) |
将窗口移至指定位置 |
SetPosition(wx.Point point) |
设置窗口的位置 |
SetDimensions(x, y, width, height, sizeFlags) |
设置窗口的位置和大小 |
有几种方法可以做到这一点。
moving.py
#!/usr/bin/env python3# -*- coding: utf-8 -*-# moving.pyimport wxclass Example(wx.Frame):def __init__(self, parent, title):super(Example, self).__init__(parent, title=title,size=(300, 200))self.Move((800, 250))def main():app = wx.App()ex = Example(None, title='Moving')ex.Show()app.MainLoop()if __name__ == '__main__':main()
有一种特殊情况。 我们可能要最大化显示我们的窗口。 在这种情况下,窗口位于(0,0),并占据整个屏幕。 wxPython 在内部计算屏幕坐标。 为了最大化我们的wx.Frame,我们调用Maximize()方法。
在屏幕上居中
如果要在屏幕上居中放置应用,则 wxPython 有一个方便的方法。 Centre()方法只是将窗口居中放在屏幕上。 无需计算屏幕的宽度和高度。 只需调用该方法。
centering.py
#!/usr/bin/env python3# -*- coding: utf-8 -*-# centering.pyimport wxclass Example(wx.Frame):def __init__(self, parent, title):super(Example, self).__init__(parent, title=title,size=(300, 200))self.Centre()def main():app = wx.App()ex = Example(None, title='Centering')ex.Show()app.MainLoop()if __name__ == '__main__':main()
在此示例中,我们在屏幕上居中了一个小窗口。
self.Centre()
Centre()方法使窗口在屏幕上居中。
在本章中,我们在 wxPython 中创建了一些简单的代码示例。
