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程序所必須的五個基本步驟:

  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()方法也將得不到調用。

  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__屬性來實現

創建最終的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__()

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

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

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

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM