wxpython入门(1)

博主之前学习过python官方御用的tkinter,不过期间挺久了。今天来尝试一点新东西,wxpython。python

什么是wxPython?

wxPython是一个用于Python编程语言的跨平台GUI工具包。它容许Python程序员简单轻松地建立具备强大,高功能的图形用户界面的程序。它被实现为一组Python扩展模块,它们包含流行的wxWidgets跨平台库的GUI组件,该 库是用C ++编写的。程序员

像Python和wxWidgets同样,wxPython是开源的,这意味着任何人均可以避免费使用它,而且任何人均可以查看和修改源代码。任何人均可觉得项目提供修复或加强功能。编程

wxPython是一个跨平台的工具包。因为编程语言是Python,所以wxPython程序简单, 易于编写易于理解app

实践hello world

import wx  # 导入wx包

app = wx.App()  # 建立一个应用程序对象
frm = wx.Frame(None, title="Hello World")  # 建立一个界面
frm.Show()  # 显示它

app.MainLoop()   # 启动一个时间循环

运行结果:框架

进阶

import wx


class HelloFrame(wx.Frame):  # 一个说Hello World的框架
    def __init__(self, *args, **kw):  # 确保调用父类的__init__
        super(HelloFrame, self).__init__(*args, **kw)
        pnl = wx.Panel(self)  # 在框架中建立一个面板
        st = wx.StaticText(pnl, label="Hello World!")  # 放一些加粗字体在面板上
        font = st.GetFont()
        font.PointSize += 10
        font = font.Bold()
        st.SetFont(font)
        sizer = wx.BoxSizer(wx.VERTICAL)  # 并建立一个sizer来管理子窗口小部件的布局
        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):
        """
        菜单栏由菜单组成,菜单由菜单项组成。
        此方法构建一组菜单并绑定要调用的处理程序
        选择菜单项时。
        """
        fileMenu = wx.Menu()  # 使用Hello和Exit项建立一个文件菜单
        # “\ t...”语法定义了一个也触发的加速键
        # 同一事件
        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")

        # Give the menu bar to the frame
        self.SetMenuBar(menuBar)

        # 最后,将处理函数与EVT_MENU事件关联起来
        # 每一个菜单项。这意味着当该菜单项是
        # activated而后将调用相关的处理函数。
        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__':
    # 运行此模块(未导入)而后建立应用程序,
    # frame,显示它,而后启动事件循环。
    app = wx.App()
    frm = HelloFrame(None, title='Hello World 2')
    frm.Show()
    app.MainLoop()

运行结果:编程语言