【Python】 用戶圖形界面GUI wxpython I 基本用法和組件


wxpython - 基本用法和組件

  wxpython是python對跨平台GUI庫wxWidgets的封裝。wxWidgets是由C++寫成的。

  wxpython被包裝進了wx模塊中,用它設計GUI很方便,但是必須要做的就是先建立一個應用的對象:

app = wx.App()
#與這個app相關的一些控件、框架等的操作,一定要在MainLoop調用前處理完
app.MainLoop()

  為了書寫方便,下面所有代碼和文本中都默認了是from wx import *了,這樣不用每個類前面再加上wx.了。。。

  *聽說是由於沿用了C++的習慣,所有wx中的方法和函數都是每個單詞的首字母大寫

  ■  一些wx的類方法

    wx.DisplaySize()  返回的是屏幕大小,如在窗口創建時指定size是這個的話創建出來的窗口就是最大化的

  ■  窗口組件

  ●  窗口(Frame)類

  所有控件都應該放到一個窗口里去展現,這個窗口類就是Frame類。他可以創建一個窗口並且右上角自帶最小化、最大化和關閉三個鍵。

  其構造方法是 Frame(self, Window parent, int id=-1, String title=EmptyStrin,Point pos=DefaultPosition, Size size=DefaultSize,long style=DEFAULT_FRAME_STYLE, String name=FrameNameStr)z

  各個參數的意思是:

    parent  一個父對象,窗口的父對象只能是窗口。父對象的意思是當前對象和其關聯起來,當父對象被關閉或者刪除的話,當前對象也跟着一起不見了

、    id  指定一個id來在真個wx中標識當前對象。一般來說不用特別指定,可以寫默認值-1,意思是讓python自動分配一個id給他就好了。當事件發生時,python會根據這個id號來定位發生事件的元素

     //以上兩個參數在所有控件類的構造方法里都有,且意思也都一樣。要記住喔

     title  傳個字符串,讓窗口上面顯示這個title

    pos  傳個元組,表示窗口被創建時出現在屏幕上的位置的坐標。左上角為原點

    size  元組,表示窗口被創建時大小,可以

    style  窗口的一些界面風格

    name  給這個窗口起一個wx內部的名字,可以引用

  Frame類有一些類方法:

    Show()  顯示窗口

    Hide()  隱藏窗口  //這兩個基本所有控件都有

    Iconize()  最小化窗口

    Close()  關閉窗口

    SetMinSize(tuple)  設置窗口可調節的最小大小

    SetMaxSize(tuple)  設置窗口可調節的最大大小

    Center()  自動將窗口居屏幕正中顯示,這樣就可以不用設置構造方法里的pos屬性了

  一般而言,不會直接調用Frame類來做文章,常見的最佳實踐是把需要的控件,事件處理方法等等封裝進一個自己定義的Frame類的子類。那么這樣一個子類其實抽象的就是一個個性化的窗口,比如:

class MyFrame(Frame):

    def __init__(self):
        Frame.__init__(self,None,-1,title="test",pos=(100,100),size=(200,200))
        '''
        布局上的一些個性化添加和操作
        '''    
    
    def someEventHandler(self,event):
        '''
        定義一些事件處理函數用於給控件Bind
        '''
        pass

if __name__ == "__main__":
    app = App()    #創建應用的對象
    myframe = MyFrame()    #創建一個自定義出來的窗口
    myframe.Show()    #這兩句一定要在MainLoop開始之前就執行    
    app.MainLoop()

   ■  面板組件 Panel

  通常Panel是添加在Frame類上, panel = Panel(Frame,-1)

  可以運用Panel來盛放其他組件,以實現對組件的分組管理。更加方便

  在panel上,可以用SetBackgroundColour(...)來設置改變背景色,SetForegroundColour(...)設置前景顏色。

  需要注意的一點是,Panel是有Size的。與窗口關聯的Panel,其大小默認為窗口的大小且具有EXPAND屬性,根據窗口大小改變而調整自身大小。而其他的Panel的默認大小是構造方法中的參數指定 or 由最后加進來多少組件決定。所以僅僅把某個沒和窗口關聯的Panel中的某個組件設置成EXPAND,而Panel本身不設置成EXPAND的話是沒有用的,因為窗口大小變化時,Panel本身大小不變。

 

  ■  靜態文本 StaticText

  構造方法:StaticText(parent,id,label,size,pos,style)

  label就是要寫的字,可以用SetLabelText(...)設置文字,GetLabelText()來獲取文字。SetForegroundColour(...)來設置字的顏色,SetBackgroundColour(...)設置背景的顏色。

  style可以設置如wx.ALIGN_CENTER這種,來讓文字居中對齊等等

 

  ■  輸入框 TextCtrl

  TextCtrl的構造方法和StaticText類似,其style可以選

  TE_READONLY  設置輸入框只讀,不可編輯

  TE_PASSWORD  輸入框中的輸入不顯示明文而顯示黑點

  TE_MULTILINE  設置為多行文本輸入框

  TextCtrl有如下類方法供調用:

    AppendText(...),WriteText(...)  向輸入框末尾加上一些文本/向輸入框開頭加上一些文本

    Clear()  清空文本框

    GetValue(),SetValue(...)  獲取/設置文本值

    GetRange(from,to)  返回兩位置中間的部分的字符串(參數是正整數,指第N個字符。開頭首個字符算0,算頭不算尾。比如HelloWorld.GetRange(2,4) == "ll")

    Remove(from,to)  刪除兩個位置中間的部分的字符串

    SetInsertionPoint(...),GetInsertionPoint()  將光標設置到第N個字符前面(首個字符算0的話)/獲得當前光標所在位置

  

  ■  按鈕  Button

  構造方法也是類似的,label參數指定了在按鈕上顯示的文本

  類方法有:

    SetLabel(...),GetLabel()  設置label,獲取label

    SetDefault()  把按鈕設置為其所在窗口的默認按鈕,即按下按鈕之后和在這個窗口獲得焦點時敲回車是一個效果

  ● 圖片按鈕

    可以用wx.Image來創建一個圖片對象,然后用一些方法把這張圖整合到button中就可以做成一個圖片按鈕:

pic = wx.Image("some_pic_path.png",wx.BITMAP_TYPE_BMP)    #建立一個圖片對象,圖片最好是.png格式的。
pic.ConvertToBitMap()    #將圖片格式轉換
btn = wx.BitmapButton(panel,-1,pic)    #建立圖片按鈕

 

wxpython - 布局和事件

wxpython - 更多組件

 


免責聲明!

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



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