wxPython官方文档中文翻译 - 概览

173 阅读5分钟

官方文档地址:wxpython.org,此文档记录了阅读官网文档过程的翻译

什么是wxPython?

wxPython是一个基于Python编程语言的用于创建桌面图形用户界面(GUI) 应用程序的跨平台工具包。Python程序员可以通过它轻松地创建拥有健壮的、功能丰富的图形用户界面的程序。wxPython是基于一系列Python扩展模块实现的,这些模块封装了使用C++编写的流行的跨平台库wxWidgets的GUI组件。

和Python以及wxWidgets一样,wxPython也是开源的,这意味着任何人都可以免费使用,且源码可供任何人查看和修改。此外,任何人都可以为项目贡献修复或增强功能。

wxPython是跨平台工具包,相同的程序可以在多个平台上运行,而无需进行任何修改。目前支持的平台有:Microsoft Windows、Mac OS X、macOS、Linux和其他带有GTK2或GTK3库的类Unix系统。在大部分的情况下,应用使用每个平台的原生widgets提供了100%的原生外观和体验。

因为使用了Python作为编程语言,wxPython程序具有简单、易读和易理解的特点。

什么是wxPython Phoenix?

wxPython的Phoenix(凤凰)项目是一个全新的、从头开始重新实现的wxPython版本,旨在让wxPython“更好、更强、更快”。换言之,新的实现专注于wxPython的速度、可维护性和扩展性,同时移除在wxPython Classic的长期发展历程中积累的无用代码。

多年以来,这个项目一直在断断续续地开发,大部分时间都是在幕后进行的。在过去几年中,自动化快照构建(automated snapshot builds)已经为那些敢于尝试的用户提供了使用机会,许多人最终开始在他们的项目中使用这些快照,甚至用于生产版本。虽然还有一些次要的事情需要完成,但封装了wxWidgets代码的新wxPython扩展模块的核心部分已经稳定很长时间了。

由于进行了一些清理、重组、简化和规范化操作,wxPython Phoenix并不完全向后兼容wxPython Classic。这是有意为之的,是有目的的,是经过设计的。然而,一般来说,API 的差异往往比较小,有些应用程序可以在进行少量甚至不进行任何修改的情况下使用Phoenix。在一些其他情况下,正确的方法在经典版(Classic)中也是可用的,只是那些错误的方法才从Phoenix中被移除了。更多信息详见迁移指南文档:docs.wxpython.org/MigrationGu…

新的wxPython API参考文档,包括所有针对Python的扩展和定制,以及wx.lib包的文档,位于以下网址:docs.wxpython.org/

Hello World

每种编程语言和用户界面工具包都需要有一个Hello World示例。这几乎是一个不成文的规定。🤔他们的意图显然是告诉你一切你需要知道的信息,以便你为自己选择合适的语言或工具包。下面是wxPython的Hello World

# 首先,引入wxPython包
import wx

# 接下来,创建一个应用对象
app = wx.App()

# 然后是一个frame(窗口)
frm = wx.Frame(None, title="Hello World")

# 显示窗口
frm.Show()

# 启动事件循环
app.MainLoop()

示例使用五行代码创建并显示了一个窗口,并运行了一个事件处理器。

什么,你觉得五行代码太多了?好吧,好吧。那就用一行代码 😛 :

import wx; a=wx.App(); wx.Frame(None, title="Hello World").Show(); a.MainLoop()

Hello World,第二部分

现在让我们给Hello World示例增加一点“血肉”,以便更好地了解创建一个wxPython应用程序的全过程。最终运行的应用程序参考下面的截图:

以下是源代码,代码中的文档字符串和注释将帮助你理解它是如何工作的。helloworld2.py (Source)

#!/usr/bin/env python
"""
更丰富的Hello World
"""

import wx

class HelloFrame(wx.Frame):
    """
    一个用于输出Hello World的frame(窗口)
    """

    def __init__(self, *args, **kw):
        # 确保父级的__init__被调用
        super(HelloFrame, self).__init__(*args, **kw)

        # 在窗口里创建一个panel(容器)
        pnl = wx.Panel(self)

        # 设置字体加粗
        st = wx.StaticText(pnl, label="Hello World!")
        font = st.GetFont()
        font.PointSize += 10
        font = font.Bold()
        st.SetFont(font)

        # 创建一个sizer(布局管理器)来管理子控件的布局
        sizer = wx.BoxSizer(wx.VERTICAL)
        sizer.Add(st, wx.SizerFlags().Border(wx.TOP|wx.LEFT, 25))
        pnl.SetSizer(sizer)

        # 创建一个菜单栏
        self.makeMenuBar()

        # 创建一个状态栏
        self.CreateStatusBar()
        self.SetStatusText("Welcome to wxPython!")


    def makeMenuBar(self):
        """
        菜单栏由菜单组成,而菜单则由菜单项组成。
        这个方法
        这个方法构建了一组菜单,并为菜单项被选中时要调用的处理程序绑定了事件。
        """

        # 创建一个file菜单,拥有Hello和Exit两个菜单项
        fileMenu = wx.Menu()
        # “\t...” 的语法定义了一个快捷键Ctrl-H,该快捷键也可以触发相同的事件。
        # 也即后续wx.EVT_MENU绑定的事件。
        helloItem = fileMenu.Append(-1, "&Hello...\tCtrl-H",
                "Help string shown in status bar for this menu item")
        fileMenu.AppendSeparator()
        # 当使用预定义ID时,我们不需要指定菜单项的标签。
        exitItem = fileMenu.Append(wx.ID_EXIT)

        # 现在为“关于”项添加一个帮助菜单。
        helpMenu = wx.Menu()
        aboutItem = helpMenu.Append(wx.ID_ABOUT)

        # 创建菜单栏,并将两个菜单添加到其中。“&”符号表示下一个字母是该菜单项的“助记符”。在
        # 支持该功能的平台上,这些字母会被下划线标出,并且可以通过键盘触发。
        menuBar = wx.MenuBar()
        menuBar.Append(fileMenu, "&File")
        menuBar.Append(helpMenu, "&Help")

        # 将菜单栏添加到窗口中
        self.SetMenuBar(menuBar)

        # 最后,为每个菜单项的EVT_MENU事件关联一个处理函数。
        # 当某个菜单项被激活时,相应的处理函数将被调用。
        self.Bind(wx.EVT_MENU, self.OnHello, helloItem)
        self.Bind(wx.EVT_MENU, self.OnExit,  exitItem)
        self.Bind(wx.EVT_MENU, self.OnAbout, aboutItem)


    def OnExit(self, event):
        """关闭窗口,结束程序。"""
        self.Close(True)


    def OnHello(self, event):
        """向用户问好。"""
        wx.MessageBox("Hello again from wxPython")


    def OnAbout(self, event):
        """显示关于对话框"""
        wx.MessageBox("This is a wxPython Hello World sample",
                      "About Hello World 2",
                      wx.OK|wx.ICON_INFORMATION)


if __name__ == '__main__':
    # 当这个模块被运行(而不是被导入)时,创建应用程序、创建窗口、显示窗口,并启动事件循环。
    app = wx.App()
    frm = HelloFrame(None, title='Hello World 2')
    frm.Show()
    app.MainLoop()