1. 程式人生 > >wxPython 基本控制元件

wxPython 基本控制元件

要在你的訊息框中顯示大量的文字,你可以使用wxPython特定的類
wx.lib.dialogs.ScrolledMessageDialog,它包含如下的建構函式:
wx.lib.dialogs.ScrolledMessageDialog(parent, msg, caption, 
        pos=wx.wxDefaultPosition, size=(500,300))
這個對話方塊不使用本地訊息框控制元件,它根據別的wxPython視窗部件來建立一個對話方塊。它只顯示一個OK按鈕,並且沒有更多的樣式資訊。

wx.TextEntryDialog
wx.TextEntryDialog(parent, message, caption="Please enter text", 
    defaultValue="", style=wx.OK | wx.CANCEL | wx.CENTRE, 
    pos=wx.DefaultPosition)

下面這些是使用文字對話方塊的便利函式:
1、wx.GetTextFromUser()
2、wx.GetPasswordFromUser()
3、wx.GetNumberFromUser()

wx.GetTextFromUser(message, caption="Input text", 
    default_value="", parent=None)
這裡的message, caption, default_value, 和 parent與wx.TextEntryDialog的建構函式中的一樣。如果使用者按下OK,該函式的返回值是使用者所輸入的字串。如果使用者按下Cancel,該函式返回空字串。

如果你希望使用者輸入密碼,你可以使用wx.GetPasswordFromUser()函式:
wx.GetPasswordFromUser(message, caption="Input text", 
    default_value="", parent=None)
這裡的引數意義和前面的一樣。使用者的輸入被顯示為星號,如果使用者按下OK,該函式的返回值是使用者所輸入的字串。如果使用者按下Cancel,該函式返回空字串。
最後,你可以使用wx.GetNumberFromUser()要求使用者輸入一個數字:
wx.GetNumberFromUser(message, prompt, caption, value, min=0, 
    max=100, parent=None)
用對話方塊顯示選項列表 wx.SingleChoiceDialog
有兩個用於單選對話方塊的便利函式。第一個是wx.GetSingleChoice,它返回使用者所選的字串:
wx.GetSingleChoice(message, caption, aChoices, parent=None)
第二個是wx.GetSingleChoiceIndex:
wx.GetSingleChoiceIndex(message, caption, aChoices, parent=None)
這個函式與第一個有相同的引數,但是返回值不同。如果使用者按下OK,則返回值是所選項的索引,如果使用者按下Cancel,則返回值是-1。

在對話方塊上顯示進度條
wx.ProgressDialog(title, message, maximum=100, parent=None, 
        style=wx.PD_AUTO_HIDE | wx.PD_APP_MODAL)
wx.ProgressDialog的樣式
wx.PD_APP_MODAL:如果設定了這個樣式,進度條對整個應用程式是模式的,這將阻塞所有的使用者事件。如果沒有設定這個樣式,那麼進度條僅對它的父視窗是模式的。
wx.PD_AUTO_HIDE:進度條將自動隱藏自身直到它達到它的最大值。
wx.PD_CAN_ABORT:在進度條上放上一個Cancel按鈕,以便使用者停止。如何響應來自該對話方塊的取消將在以後說明。
wx.PD_ELAPSED_TIME:顯示該對話方塊已經出現了多長時間。
wx.PD_ESTIMATED_TIME:顯示根據已花的時間、當前的計數值和計數器的最大值所估計出的完成進度所需的總時間。
wx.PD_REMAINING_TIME:顯示要完成進度所估計的剩餘時間,或(所需總時間-已花時間)。


檔案選擇對話方塊 wx.FileDialog
wx.FileDialog(parent, message="Choose a file", defaultDir="", 
        defaultFile="", wildcard="*.*", style=0, 
        pos=wx.DefaultPosition)
用於開啟檔案的對話方塊有兩個標記,它們進一步影響對話方塊的行為。wx.HIDE_READONLY標記灰化複選框,使使用者以只讀模式開啟檔案。wx.MULTIPLE標記使使用者可以在一個目錄中選擇開啟多個檔案。
使用檔案對話方塊的函式:
wx.FileSelector(message, default_path="", default_filename="", 
    default_extension="", wildcard="*.*'', flags=0, parent=None, 
    x=-1, y=-1)
message, default_path, default_filename, 和 wildcard引數意義與建構函式的基本相同,儘管引數的名字不同。flags引數通常被稱作style,default_extension引數是儲存為檔案時預設的字尾(如果使用者沒有指定字尾的情況下)。如果使用者按下OK,返回值是字串形式的路徑名,如果使用者按下Cancel則返回一個空字串。

選擇一個目錄
wx.DirDialog(parent, message="Choose a directory", defaultPath="", 
    style=0, pos = wx.DefaultPosition, size = wx.DefaultSize, 
    name="wxDirCtrl")
 
字型選擇對話方塊
wx.FontDialog(parent, data)

顏色對話方塊
wx.ColourDialog(parent, data=None)

使使用者能夠瀏覽影象
ImageDialog(parent, set_dir=None)

嚮導
wx.wizard.Wizard(parent, id=-1, title=wx.EmptyString, 
    bitmap=wx.NullBitmap, pos=wx.DefaultPosition)

EVT_WIZARD_CANCEL:當用戶按下Cancel按鈕時產生。該事件可以使用Veto()來否決,這種情況下,對話方塊將不會消失。
EVT_WIZARD_FINISHED :當用戶按下Finish按鈕時產生。
EVT_WIZARD_HELP:當用戶按下Help按鈕時產生。
EVT_WIZARD_PAGE_CHANGED:在頁面被切換後產生。
EVT_WIZARD_PAGE_CHANGING:當用戶已請求了一個頁面切換時產生,這時頁面還沒有發生切換。這個事件可以被否決(例如,如果頁面上有一個必須被填寫的欄位)。
wx.wizard.WizardPageSimple類被當作一個面板一樣。它的建構函式使你可以設定上一頁和下一頁,如下所示:
wx.wizard.WizardPageSimple(parent=None, prev=None, next=None)
如果你想在構造器中設定它們,你可以使用SetPrev()和SetNext()方法。如果那樣太麻煩,你可以使用wx.wizard.WizardPageSimple_Chain(),它設定兩頁間的連結關係。
嚮導頁的複雜版:wx.wizard.WizardPage,稍微不同。它沒有顯式地設定前一頁和下一頁,而是使你能夠使用更復雜的邏輯去定義下一步到哪兒。它的建構函式如下:
wx.WizardPage(parent, bitmap=wx.NullBitmap, resource=None)

啟動提示
wx.CreateFileTipProvider(filename, currentTip)

顯示提示的函式是wx.ShowTip():
wx.ShowTip(parent, tipProvider, showAtStartup)

建立選單的步驟:
·建立選單欄 wx.MenuBar()
·把選單欄附加給框架
·建立單個的選單 wx.Menu(title="", style=0) 然後 Append(menu, title)
·把選單附加給選單欄或一個父選單
·建立單個的選單項
·把這些選單項附加給適當的選單
·為每個選單項建立一個事件繫結
 
在選單欄處理選單的wx.MenuBar的方法
Append(menu, title):將menu引數新增到選單欄的尾部(靠右顯示)。title引數被用來顯示新的選單。如果成功返回True,否則返回False。
Insert(pos, menu, title):將給定的menu插入到指定的位置pos(呼叫這個函式之後,
GetMenu(pos) == menu成立)。就像在列表中插入一樣,所有後面的選單將被右移。選單的索引以0開始,所以pos為0等同於將選單放置於選單欄的左端。使用GetMenuCount()作為pos等同於使用Append。title被用於顯示名字。函式如果成功則返回True。
Remove(pos):刪除位於pos的選單,之後的其它選單左移。函式返回被刪除的選單。
Replace(pos, menu, title):使用給定的menu,和title替換位置pos處的選單。選單欄上的其它選單不受影響。函式返回替換前的選單。
wx.MenuBar包含一些其它的方法。它們用另外的方式處理選單欄中的選單,如表10.2所示。


wx.MenuBar的選單屬性方法
EnableTop(pos, enable):設定位置pos處的選單的可用/不可用狀態。如果enable是True,那麼該選單是可用的,如果是False,那麼它不可用。
GetMenu(pos):返回給定位置處的選單物件。
GetMenuCount():返回選單欄中的選單的數量。
FindMenu(title):返回選單欄有給定title的選單的整數索引。如果沒有這樣的選單,那麼函式返回常量wx.NOT_FOUND。該方法將忽略快捷鍵,如果有的話。
GetLabelTop(pos) 
SetLabelTop(pos, label):得到或設定給定位置的選單的標籤。

給下拉選單填加專案
wx.MenuBar的選單項處理方法
FindMenuItem(menuString,itemString):在一個名為menuString的選單中查詢名為itemString的選單項。返回找到的選單項或wx.NOT_FOUND。
FindItemById(id):返回與給定的wxPython識別符號相關聯的選單項。如果沒有,返回None。
GetHelpString(id)
SetHelpString(id,helpString):用於給定id的選單項的幫助字串的獲取或設定。如果沒有這樣的選單項,那麼get*方法返回"",set*方法不起作用。
GetLabel(id)
SetLabel(id, label):用於給定id的選單項的標籤的獲取或設定。如果沒有這樣的選單項,那麼get*方法返回"",set*方法不起作用。這些方法只能用在選單欄已附加到一個框架後。

wx.Menu的選單項方法
FindItem(itemString):返回與給定的itemString相關的選單項或wx.NOT_FOUND。
FindItemById(id):返回與給定的wxPython識別符號相關聯的選單項。如果沒有,返回None。
FindItemByPosition(pos):返回選單中給定位置的選單項
GetHelpString(id)
SetHelpString(id,helpString):與選單欄的對應方法相同。
GetLabel(id)
SetLabel(id, label):與選單欄的對應方法相同。

選單項的外觀屬性
GetBackgroundColour()
SetBackgroundColour(colour):屬性型別是wx.Colour,該set*方法的引數也可以是一個wxPython顏色的名稱字串。管理專案的背景色。

GetFont()
SetFont(font):專案的顯示字型。型別是wx.Font。

GetTextColour()
SetTextColour(colour):管理顯示在專案中的文字的顏色。型別和背景色的相同。


Sizer
wxPython sizer是一個物件,它唯一的目的就是管理容器中的視窗部件的佈局。sizer本身不是一個容器或一個視窗部件。它只是一個屏幕布局的演算法。所有的sizer都是抽象類wx.Sizer的一個子類的例項
wxPython中預定義的sizer
Grid:一個十分基礎的網格佈局。當你要放置的視窗部件都是同樣的尺寸且整齊地放入一個規則的網格中是使用它。
Flex grid:對grid sizer稍微做了些改變,當視窗部件有不同的尺寸時,可以有更好的結果。
Grid bag:grid sizer系列中最靈活的成員。使得網格中的視窗部件可以更隨意的放置。
Box:在一條水平或垂直線上的視窗部件的佈局。當尺寸改變時,在控制視窗部件的的行為上很靈活。通常用於巢狀的樣式。可用於幾乎任何型別的佈局。
Static box:一個標準的box sizer。帶有標題和環線。

使用一個sizer的三個基本步驟:
·建立並關聯sizer到一個容器。sizer被關聯到容器使用wx.Window的SetSizer(sizer)方法。由於這是一個wx.Window的方法,所以這意味著任何wxPython視窗部件都可以有一個sizer,儘管sizer只對容器類的視窗部件有意義。
·新增每個孩子到這個sizer。所有的孩子視窗部件需要被單獨新增到該sizer。僅僅建立使用容器作為父親的孩子視窗部件是不夠的。還要將孩子視窗部件新增到一個sizer,這個主要的方法是Add()。Add()方法有一對不同的標記
wx.GridSizer(rows, cols, vgap, hgap)

對sizer新增或移除孩子 
Add()   Add(window, proportion=0, flag=0, border=0, userData=None) 
insert() Insert(index, window, proportion=0, flag=0, border=0, userData=None) 
Prepend() Prepend(window, proportion=0, flag=0, border=0, userData=None) 
Detach() Detach(window)

尺寸調整和對齊行為標記
wx.ALIGN_BOTTOM:按照視窗部件被分配的空間(格子)的底部對齊。
wx.ALIGN_CENTER:放置視窗部件,使視窗部件的中心處於其所分配的空間的中心。
wx.ALIGN_CENTER_HORIZONTAL:在它所處的格子中,水平居中。
wx.ALIGN_CENTER_VERTICAL :在它所處的格子中,垂直居中。
wx.ALIGN_LEFT:靠著它所處的格子左邊緣。這是預設行為。
wx.ALIGN_TOP:靠著它所處的格子的上邊緣。這是預設的行為。
wx.EXPAND:填滿它所處的格子空間。
wx.FIXED_MINSIZE:保持固定項的最小尺寸。
wx.GROW:與wx.EXPAND相同。但比之少兩個字元,節約了時間。
wx.SHAPED:視窗部件的尺寸改變時,只在一個方向上填滿格子,另一個方向上按視窗部件原先的形狀尺寸的比列填充。

影象
從一個檔案載入一個影象,使用wx.Image的建構函式:
wx.Image(name, type=wx.BITMAP_TYPE_ANY, index=-1)
wxPython支援的影象檔案格式

處理器類:wx.ANIHandler    型別標記:wx.BITMAP_TYPE_ANI
說明:動畫游標格式。這個處理器只載入影象而不儲存它們。

處理器類:wx.BMPHandler 型別標記:wx.BITMAP_TYPE_BMP
說明:Windows和OS/2點陣圖格式。

處理器類:wx.CURHandle 型別標記:wx.BITMAP_TYPE_CUR
說明:Windows游標 圖示格式。

處理器類:wx.GIFHandler 型別標記:wx.BITMAP_TYPE_GIF
說明:圖形交換格式。由於版權限制,這個處理器不儲存影象。

處理器類:wx.ICOHandler 型別標記:wx.BITMAP_TYPE_ICO
說明:Windows圖示格式。

處理器類:wx.IFFHandler 型別標記:wx.BITMAP_TYPE_IFF
說明:交換檔案格式。這個處理器只載入影象,它不儲存它們。

處理器類:wx.JPEGHandler 型別標記:wx.BITMAP_TYPE_JPEG
說明:聯合圖形專家組格式。

處理器類:wx.PCXHandler 型別標記:wx.BITMAP_TYPE_PCX
說明:PC畫刷格式。當以這種格式儲存時,wxPython計算在這個影象中的不同顏色的數量。如果可能的話,這個影象被儲存為一個8點陣圖像(也就是說,如果它有256種或更少的顏色)。否則它儲存為24位。

處理器類:wx.PNGHandler 型別標記:wx.BITMAP_TYPE_PNG
說明:行動式網路圖形格式。

處理器類:wx.PNMHandler 型別標記:wx.BITMAP_TYPE_PNM
說明:只能載入ASCII或原始的RGB影象。影象被該處理器儲存為原始的RGB。

處理器類:wx.TIFFHandler 型別標記:wx.BITMAP_TYPE_TIF
說明:標籤影象檔案格式。

處理器類:wx.XPMHandler 型別標記:wx.BITMAP_TYPE_XPM
說明:XPixMap格式。

處理器類:自動 型別標記:wx.BITMAP_TYPE_ANY
說明:自動檢測使用的格式,然後呼叫相應的處理器。


wx.Image的影象處理方法
ConvertToMono(r, g, b):返回一個與原尺寸一致的wx.Image,其中所有顏色值為(r, g, b)的畫素顏色改為白色,其餘為黑色。原影象未改變。
Mirror(horizontally=True):返回原影象的一個映象影象。如果horizontally引數是True,那麼映象影象是水平翻轉了的,否則是垂直翻轉了的。原影象沒有改變。
Replace(r1, g1, b1, r2, g2, b2):改變呼叫該方法的影象的所有顏色值為r1, g1, b1的畫素的顏色為r2, g2, b2。
Rescale(width, height):改變影象的尺寸為新的寬度和高度。原影象也作了改變,並且顏色按比例地調整到新的尺寸。
Rotate(angle, rotationCentre, interpolating=True, offestAfterRotation=None):返回旋轉原影象後的一個新的影象。引數angle是一個浮點數,代表所轉的弧度。rotationCentre是一個wx.Point,代表旋轉的中心。如果interpolating為True,那麼一個較慢而精確的演算法被使用。offsetAfterRotation是一個座標點,表明在旋轉後圖像應該移位多少。任何未被覆蓋的空白畫素將被設定為黑色,或如果該影象有一個遮罩色,設定為遮罩色(mask color)。
Rotate90(clockwise=True):按照引數clockwise的布林值,控制影象按順或逆時針方向作90度的旋轉。
Scale(width, height):返回一個原影象的拷貝,並按比例改變為新的寬度和高度。


如何改變游標

預定義的游標
wx.CURSOR_ARROW:標準的箭頭游標。
wx.CURSOR_ARROWWAIT:一個表示繁忙的游標,它同時顯示標準箭頭和一個沙漏。只在Windows系統有效。
wx.CURSOR_BLANK:不可見的游標。當你想欺騙使用者時是有用的。
wx.CURSOR_BULLSEYE:一個bullseye cursor(在較大的游標裡面有小的園環)。有時對於精確指向是有用的。
wx.CURSOR_CHAR:一個字元游標。不是在所平臺上有效。
wx.CURSOR_CROSS:十字叉絲游標。
wx.CURSOR_HAND:典型的手指型游標。
wx.CURSOR_IBEAM:垂直的I型游標,通常用在一個文字編輯域中。
wx.CURSOR_LEFT_BUTTON:一個帶有左按鍵為按下狀態的滑鼠——用於提示使用者他應該按下左按鍵。不是對所有平臺有效。
wx.CURSOR_MAGNIFIER:放大鏡,通常用於表示縮放。
wx.CURSOR_MIDDLE_BUTTON:一個帶有中間按鍵為按下狀態的滑鼠。
wx.CURSOR_NO_ENTRY:一箇中間有一個斜線的園環游標。用於表明螢幕中的一個區域是無效的(例如對一個目標的拖放)。
wx.CURSOR_PAINT_BRUSH:像一個畫刷樣的游標。通常用在繪圖程式中。
wx.CURSOR_PENCIL:鋼筆樣游標,常用於繪圖程式中。
wx.CURSOR_POINT_LEFT:左指向箭頭游標。
wx.CURSOR_POINT_RIGHT:右指向箭頭游標。
wx.CURSOR_QUESTION_ARROW:一個帶有問號的箭頭,常用於表示上下文幫助。
wx.CURSOR_RIGHT_ARROW:正如標準的箭頭游標一樣,只是映象化的,以便它指向右邊。
wx.CURSOR_RIGHT_BUTTON:一個右按鍵按下的滑鼠。
wx.CURSOR_SIZENESW:游標的一種,用於表明兩個方向的尺寸調整,游標的傾斜方向是45度(西南到東北方向)。
wx.CURSOR_SIZENS:垂直調整尺寸游標,上下指向。
wx.CURSOR_SIZENWSE:游標的一種,用於表明兩個方向的尺寸調整,游標的傾斜方向是135度。
wx.CURSOR_SIZEWE:水平調整尺寸游標,左右指向。
wx.CURSOR_SIZING:通常的尺寸調整游標,四個方向的箭頭指向。
wx.CURSOR_SPRAYCAN:另一個繪圖用的游標。
wx.CURSOR_WAIT:沙漏等待游標。
wx.CURSOR_WATCH:手錶型等待游標