ZetCode

第一步

最后修改于 2023 年 1 月 10 日

在本 wxPython 教程中,我们将创建一些简单的例子。

简单示例

我们从一个非常简单的例子开始。我们的第一个脚本将只显示一个小窗口。

它不会做很多事情。我们将逐行分析脚本。

simple.py
#!/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 工具包隐藏并默认提供。没有理由重新发明轮子。

Simple example
图:简单示例

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 控件的样式。

no_minimize.py
#!/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() 方法。

set_size.py
#!/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) 设置窗口的位置和大小

有几种方法可以做到这一点。

moving.py
#!/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() 方法只是将窗口在屏幕上居中。无需计算屏幕的宽度和高度。只需调用该方法。

centering.py
#!/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 中的简单代码示例。