第一步
最后修改于 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 中的简单代码示例。