第一步
在 wxPython 教程的这一部分中,我们将创建一些简单的示例。
简单的例子
我们从一个非常简单的例子开始。 我们的第一个脚本只会显示一个小窗口。
它不会做太多。 我们将逐行分析脚本。
simple.py
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# simple.py
import wx
app = 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.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()
我们的意图是显示一个没有最小化框的窗口。 因此,我们没有在style
参数中指定此标志。
大小和位置
我们可以通过两种方式指定应用的大小。 我们的小部件的构造器中有一个size
参数,或者我们可以调用SetSize()
方法。
set_size.py
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# 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
小部件的宽度设置为 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.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 python3
# -*- coding: utf-8 -*-
# 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 中创建了一些简单的代码示例。