wxpython入门第一步(简单例子)

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

简单的例子

​ 我们从一个非常简单的例子开始。我们的第一个脚本将只显示一个小窗口。它不会做太多事情。我们将逐行分析这个脚本。

# simple.py
import wx
app = wx.App()

frame = wx.Frame(None, title='Simple application')
frame.Show()

app.MainLoop()

​ 这是我们的第一个例子

# simple.py

​ 第一行是脚本的名称

import wx

​ 这一行导入了基本的 wxPython 模块,即 core、controls、gdi、misc 和 windows。从技术上讲,wx是一个命名空间,所有基本模块中的函数和对象都以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 工具包默认隐藏和提供的。我们没有理由重新发明轮子。 file

wx.Frame

​ wx.Frame widget 是 wxPython 中最重要的 widgets之一。它是一个容器组件,意味着它可以包含其他组件。这意味着它可以包含其他小组件,实际上它可以包含任何非框架或对话框的窗口。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

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()

​ 我们的目的是为了显示一个没有最小化框的窗口,所以我们没有在样式参数中指定这个标志。

大小和位置

​ 我们可以通过两种方式来指定我们应用程序的大小。我们在widget的构造函数中有一个大小参数,或者我们可以调用SetSize()方法。

# 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()

​ 在这个例子中,应用程序的大小将是350x250px。

def __init__(self, parent, title):
    super(Example, self).__init__(parent, title=title, 
        size=(350, 250))

​ 在构造函数中,我们将wx.Frame组件的宽度设置为350 px。widget的高度为250 px。

​ 同样,我们也可以在屏幕上定位我们的应用程序。默认情况下,窗口被放置在屏幕的左上角。但在不同的操作系统平台甚至窗口管理器上可能会有所不同。有些窗口管理器会自己放置应用程序窗口。有的会做一些优化,让窗口不重叠。程序员可以通过编程来定位窗口。我们已经在wx.Frame widget的构造函数中看到了一个pos参数。通过提供默认值以外的其他参数,我们可以自己控制位置。

MethodDescription
Move(wx.Point point)move a window to the given position
MoveXY(int x, int y)move a window to the given position
SetPosition(wx.Point point)set the position of a window
SetDimensions(x, y, width, height, sizeFlags)set the position and the size of a window

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

# 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

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()方法使窗口在屏幕上居中。

  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值