. 消息對話框(wx.MessageDialog)
消息對話框
與用戶通信最基本的機制是wx.MessageDialog,它是一個簡單的提示框。
wx.MessageDialog可用作一個簡單的OK框或yes/no對話框。下面的片斷顯示了yes/no對話框:
dlg = wx.MessageDialog(None, 'Is this the coolest thing ever!', 'MessageDialog', wx.YES_NO | wx.ICON_QUESTION) result = dlg.ShowModal() dlg.Destroy()
wx.MessageDialog參數如下:
wx.MessageDialog(parent, message, caption="Message box",
style=wx.OK | wx.CANCEL, pos=wx.DefaultPosition) ShowModal()方法將對話框以模式框架的方式顯示(還可以以Show()方法顯示,但不會阻塞別的窗口相應用戶事件)
這意味着在對話框關閉之前,應用程序中的別的窗口不能響應用戶事件。
ShowModal()方法的返回值是一個整數,對於wx.MessageDialog,返回值是下面常量之一:
wx.ID_YES, wx.ID_NO, wx.ID_CANCEL, wx.ID_OK。
2. 文本輸入對話框
如果你想從用戶那里得到單獨一行文本,你可能使用類wx.TextEntryDialog。
下面的片斷創建了一個文本輸入域,當用戶單擊OK按鈕退出時,獲得用戶輸入的值:
dlg = wx.TextEntryDialog(None, "Who is buried in Grant's tomb?", 'A Question', 'Cary Grant') if dlg.ShowModal() == wx.ID_OK: response = dlg.GetValue()
上面的wx.TextEntryDialog的參數按順序說明是,
父窗口,顯示在窗口中的文本標簽,
窗口的標題(默認是“Please enter text”),
輸入域中的默認值。
同樣它也有一個樣式參數,默認是wx.OK | wx.CANCEL。
與wx.MessageDialog一樣,ShowModal()方法返回所按下的按鈕的ID。
GetValue()方法得到用戶輸入在文本域中的值(這有一個相應的SetValue()方法讓你可以改變文本域中的值)。
3.從一個列表中選擇
你可以讓用戶只能從你所提供的列表中選擇,你可以使用類wx.SingleChoiceDialog。下面是一個簡單的用法:
dlg = wx.SingleChoiceDialog(None, 'What version of Python are you using?', 'Single Choice', ['1.5.2', '2.0', '2.1.3', '2.2', '2.3.1'], if dlg.ShowModal() == wx.ID_OK: response = dlg.GetStringSelection()
wx.SingleChoiceDialog的參數類似於文本輸入對話框,只是以字符串的列表代替了默認的字符串文本。
要得到所選擇的結果有兩種方法,
GetSelection()方法返回用戶選項的索引,而GetStringSelection()返回實際所選的字符串。
4.標准文件對話框
wx.FileDialog最重要的方法是它的構造器,語法如下:
wx.FileDialog(parent, message="Choose a file",
defaultDir="", defaultFile="", wildcard="*.*", style=0)
表6.6對構造器的參數進行了說明。
表6.6 wx.FileDialog構造器的參數
parent:對話框的父窗口。如果沒有父窗口則為None。
message:message顯示在對話框的標題欄中。
defaultDir:當對話框打開時,默認的目錄。如果為空,則為當前工作目錄。
defaultFile:當對話框打開時,默認選擇的文件。如果為空,則沒有文件被選擇。
wildcard:通配符。指定要選擇的文件類型。
格式是 display | wildcard 。可以指定多種類型的文件,
例如:“Sketch files (*.sketch)|*.sketch|All files (*.*)|*.*”。
style:樣式。見下表6.7。
表6.7 wx.FileDialog的樣式
wx.CHANGE_DIR:在用戶選擇了一個文件之后,當前工作目錄相應改變到所選文件所在的目錄。
wx.MULTIPLE:僅適用於打開對話框。這個樣式使得用戶可以選擇多個文件。
wx.OPEN:這個樣式用於打開一個文件。
wx.OVERWRITE_PROMPT:僅適用於保存文件對話框。顯示一個提示信息以確認是否覆蓋一個已存在的文件。
wx.SAVE:這個樣式用於保存一個文件。
要使用文件對話框,要對一個對話框實例調用ShowModal()方法。
這個方法根據用戶所敲擊的對話框上的按鈕來返回wx.ID_OK或wx.ID_CANCEL。
選擇之后。使用GetFilename(), GetDirectory(), 或GetPath()方法來獲取數據。
之后,調用Destroy()銷毀對話框是一個好的觀念。
5.標准的顏色選擇器
我們可以使用wxPython提供的標准wx.ColourDialog。
這個對話框的用法類似於文件對話框。
它的構造器只需要一個parent(雙親)和一個可選的數據屬性參數。
數據屬性是一個wx.ColourData的實例,它存儲與該對話框相關的一些數據,
如用戶選擇的顏色,還有自定義的顏色的列表。
使用數據屬性使你能夠在以后的應用中保持自定義顏色的一致性。
dlg = wx.ColourDialog(self)
dlg.GetColourData().SetChooseFull(True)
if dlg.ShowModal() == wx.ID_OK:
print dlg.GetColourData().GetColour()
dlg.Destroy()
顏色數據實例的SetChooseFull()方法告訴對話框去顯示整個調色板,其中包括了自定義的顏色信息。
對話框關閉后,我們根據得到的顏色來拾取顏色數據。顏色數據作為一個wx.Color的實例返回.
6、文件夾選擇對話框
1、文件保存對話框
file_wildcard = "Paint files(*.paint)|*.paint|All files(*.*)|*.*" dlg = wx.FileDialog(self, "Save paint as ...", os.getcwd(), style = wx.SAVE | wx.OVERWRITE_PROMPT, wildcard = file_wildcard) if dlg.ShowModal() == wx.ID_OK: filename = dlg.GetPath() if not os.path.splitext(filename)[1]: #如果沒有文件名后綴 filename = filename + '.paint' self.filename = filename self.SaveFile() self.SetTitle(self.title + '--' + self.filename) dlg.Destroy()
2、打開文件對話框
def OnOpen(self, event): ''' 打開開文件對話框 ''' file_wildcard = "Paint files(*.paint)|*.paint|All files(*.*)|*.*" dlg = wx.FileDialog(self, "Open paint file...", os.getcwd(), style = wx.OPEN, wildcard = file_wildcard) if dlg.ShowModal() == wx.ID_OK: self.filename = dlg.GetPath() self.ReadFile() self.SetTitle(self.title + '--' + self.filename) dlg.Destroy()