wxPython學習筆記(一)

建立最小的空的wxPython程序

import wx #1

class App(wx.App):#2

    def OnInit(self): #3
        frame = wx.Frame(parent=None, title='Bare')
        frame.Show()
        return True

app = App() #4
app.MainLoop() #5

上面的代碼的任何一行都不能少,不然將不能工做。這個基本的wxPython程序說明了開發任一wxPython程序所必須的五個基本步驟:app

  1. 導入必須的wxPython
    一旦你導入了wx模塊,你就可以建立你的應用程序(application)對象和框架(frame)對象。每一個wxPython程序必須有一個application對象和至少一個frame對象。application對象必須是wx.App的一個實例或你在OnInit()方法中定義的一個子類的一個實例。當你的應用程序啓動的時候,OnInit()方法將被wx.App父類調用。框架

  2. 子類化wxPython應用程序類wx.App
    咱們一般在OnInit()方法中建立frame對象。上面的wx.Frame接受三個參數,僅第一個(parent=None)是必須的,其他的都有默認值。 調用Show()方法使frame可見,不然不可見。咱們能夠經過給Show()一個布爾值參數來設定frame的可見性函數

  3. 定義一個應用程序的初始化方法
    咱們沒有爲咱們的應用程序類定義一個__init__()方法。在Python中,這就意味着父方法wx.App.__init()__將在對象建立時被自動調用。這是一個好的事情。若是你定義你本身的__init__()方法,不要忘了調用其基類的__init()__方法,如:
    class App(wx.App):
        def __init__(self):
    
            wx.App.__init__(self)

     若是你忘了這樣作,wxPython將不被初始化而且你的OnInit()方法也將得不到調用。oop

  4. 建立一個應用程序類的實例
  5. 進入這個應用程序的主事件循環
    一旦進入主事件循環,控制權將轉交給wxPythonwxPythonGUI程序主要響應用戶的鼠標和鍵盤事件。當一個應用程序的全部框架被關閉後,這個app.MainLoop()方法將返回且程序退出。

 擴展這個最小的空的wxPython程序

import wx

class Frame(wx.Frame):   #3
    pass

class App(wx.App):

    def OnInit(self):
        self.frame = Frame(parent=None, title='Spare')   #4
        self.frame.Show()
        self.frame.Center()
        self.SetTopWindow(self.frame)   #5
        return True

if __name__ == '__main__':   #6
    app = App()
    app.MainLoop()
  1.  咱們改變了建立frame對象的方法。bare版的程序簡單地建立了一個wx.Frame類的實例。在spare版中,咱們定義了咱們本身的Frame類做爲wx.Frame的子類。此時,最終的結果沒有什麼不一樣,可是若是你想在你的框架中顯示諸如文本、按鈕、菜單的話,你可能就想要你本身的Frame類了。
  2. 咱們將對frame實例的引用做爲應用程序實例的一個屬性
  3. OnInit()方法中,咱們調用了這個App類本身的SetTopWindow()方法,並傳遞給它咱們新建立的frame實例。咱們沒必要定義SetTopWindow()方法,由於它繼承自wx.App父類。SetTopWindow()方法是一個可選的方法,它讓wxPython方法知道哪一個框架或對話框將被認爲是主要的。一個wxPython程序能夠有幾個框架,其中有一個是被設計爲應用程序的頂級窗口的。測試

  4.  這個是Python中一般用來測試該模塊是做爲程序獨立運行仍是被另外一模塊所導入。咱們經過檢查該模塊的__name__屬性來實現
    spa

建立最終的hello.py程序

import wx


class Frame(wx.Frame):   #2 wx.Frame子類
    """Frame class that displays an image."""

    def __init__(self, image, parent=None, id=-1,
                 pos=wx.DefaultPosition,
                 title='Hello, wxPython!'): #3圖像參數
        """Create a Frame instance and display image."""
#4 顯示圖像
        temp = image.ConvertToBitmap() #轉換爲位圖
        size = temp.GetWidth(), temp.GetHeight()
        wx.Frame.__init__(self, parent, id, title, pos, size)
        self.bmp = wx.StaticBitmap(parent=self, bitmap=temp)

class App(wx.App):  #5 wx.App子類
    """Application class."""

    def OnInit(self):
#6 圖像處理
        image = wx.Image('back_image.jpg', wx.BITMAP_TYPE_JPEG)
        self.frame = Frame(image)

        self.frame.Show()
        self.SetTopWindow(self.frame)
        return True

def main():  #7
    app = App()
    app.MainLoop()

if __name__ == '__main__':
     main() 

#2 定義一個wx.Frame的子類,以便咱們更容量控制框架的內容和外觀。設計

#3 給咱們的框架的構造器增長一個圖像參數。這個值經過咱們的應用程序類在建立一個框架的實例時提供。一樣,咱們能夠傳遞必要的值給wx.Frame.__init__()code

#4 咱們將用wx.StaticBitmap控件來顯示這個圖像,它要求一個位圖。因此咱們轉換圖像到位圖。咱們也使用圖像的寬度和高度建立一個size元組。這個size元組被提供給wx.Frame.__init__()調用,以便於框架的尺寸匹配位圖尺寸。對象

#5 定義一個帶有OnInit()方法的wx.App的子類,這是wxPython應用程序最基本的要求。blog

#6 咱們使用與hello.py在同一目錄下的名爲wxPython.jpg的文件建立了一個圖像對象。

#7 main()函數建立一個應用程序的實例並啓動wxPython的事件循環。

相關文章
相關標籤/搜索