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

運行結果:編程語言