第一步
最后修改于 2023 年 1 月 10 日
在本 wxPython 教程中,我们将创建一些简单的例子。
简单示例
我们从一个非常简单的例子开始。我们的第一个脚本将只显示一个小窗口。
它不会做很多事情。我们将逐行分析脚本。
#!/usr/bin/env python # simple.py import wx app = wx.App() frame = wx.Frame(None, title='Simple application') frame.Show() app.MainLoop()
这是我们在 wxPython 中的第一个例子。
#!/usr/bin/env python # simple.py
第一行是 she-bang,后面是 Python 解释器的路径。第二行是一个魔术注释,它指定了源代码的编码。第四行是一个注释,它为脚本提供了一个名称。
import wx
这一行导入基本的 wxPython 模块。即 core, controls, gdi, misc 和 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 工具包隐藏并默认提供。没有理由重新发明轮子。

wx.Frame
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
控件的样式。
#!/usr/bin/env python # no_minimize.py import wx app = 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()
我们的目的是显示一个没有最小化框的窗口。因此,我们没有在样式参数中指定此标志。
大小和位置
我们可以通过两种方式指定应用程序的大小。我们在控件的构造函数中有一个大小参数,或者我们可以调用 SetSize()
方法。
#!/usr/bin/env python # set_size.py import wx class 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
控件的宽度设置为 350 像素。控件的高度为 250 像素。
同样,我们可以在屏幕上定位我们的应用程序。默认情况下,窗口放置在屏幕的左上角。但它在各种操作系统平台甚至窗口管理器上可能会有所不同。一些窗口管理器自行放置应用程序窗口。其中一些做了优化,因此窗口不会重叠。程序员可以通过编程方式定位窗口。我们已经在 wx.Frame
控件的构造函数中看到了一个 pos
参数。通过提供默认值以外的值,我们可以自己控制位置。
方法 | 描述 |
---|---|
Move(wx.Point point) | 将窗口移动到给定位置 |
MoveXY(int x, int y) | 将窗口移动到给定位置 |
SetPosition(wx.Point point) | 设置窗口的位置 |
SetDimensions(x, y, width, height, sizeFlags) | 设置窗口的位置和大小 |
有几种方法可以做到这一点。
#!/usr/bin/env python # moving.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)) 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()
方法只是将窗口在屏幕上居中。无需计算屏幕的宽度和高度。只需调用该方法。
#!/usr/bin/env python # centering.py import wx class 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 中的简单代码示例。