wx.Dialog(parent, id, title, pos, size, style)
Dialog控制元件的預設外觀顯示在標題列中只關閉對話方塊。但是,它可以用下面的風格引數的組合進行客製化?
S.N. | 引數 & 描述 |
---|---|
1 |
wx.CAPTION
對話方塊的文字說明
|
2 |
wx.DEFAULT_DIALOG_STYLE
相當於wxCAPTION,wxCLOSE_BOX和wxSYSTEM_MENU的組合
|
3 |
wx.RESIZE_BORDER
顯示可調框架視窗的大小
|
4 |
wxSYSTEM_MENU
顯示系統選單
|
5 |
wx.CLOSE_BOX
框架(frame)上顯示一個關閉
|
6 |
wx.MAXIMIZE_BOX
在對話方塊中顯示一個最大化框
|
7 |
wx.MINIMIZE_BOX
在對話方塊中顯示一個最小化框(frame)
|
8 |
wx.STAY_ON_TOP
確保對話方塊停留在所有其他視窗的頂部
|
9 |
wx.DIALOG_NO_PARENT
為防止產生無看管對話方塊。不推薦用於模態對話方塊
|
S.N. |
事件和說明
|
---|---|
1 |
EVT_CLOSE
當使用者或程式設計對話方塊的關閉
|
2 |
EVT_INIT_DIALOG When the dialog is being initialized |
如上所述,對話的目的是收集資料並返回到父視窗。然而,一些有用的方法可用於 Dialog類。
S.N. |
方法和說明
|
---|---|
1 |
DoOK()
當對話方塊中的OK按鈕被按下時呼叫
|
2 |
ShowModal()
顯示了在應用程式模態方式的對話方塊
|
3 |
ShowWindowModal()
對話方塊只頂層父視窗的模式
|
4 |
EndModal()
ShowModal呼叫傳遞值結束一個對話方塊模式
|
一個預組態的對話方塊是MessageDialog。它用於顯示的一條或多條線用具有標準ID的按鈕的訊息。 下面是對MessageDialog標準按鈕選擇列表。
S.N. |
按鈕和說明
|
---|---|
1 |
wx.OK
顯示OK按鈕
|
2 |
wx.CANCEL
顯示取消(Cancel)按鈕
|
3 |
wx.YES_NO
顯示「是」,「否」按鈕
|
4 |
wx.YES_DEFAULT
使Yes按鈕為預設
|
5 |
wx.NO_DEFAULT 使No按鈕為預設 |
6 |
wx.ICON_EXCLAMATION
顯示警告圖示
|
7 |
wx.ICON_ERROR
顯示錯誤圖示
|
8 |
wx.ICON_HAND
同wx.ICON_ERROR
|
9 |
wx.ICON_INFORMATION
顯示一個資訊圖示
|
10 |
wx.ICON_QUESTION
顯示一個問題圖示
|
wx.MessageDialog(parent, message, caption, style, pos)
一個或多個訊息引數要顯示文字的行,文字說明顯示在標題列。預設style引數是wx.OK| wx.ECNRE。 其他樣式style引數允許訊息框進行客製化。
下面給出的是對話的模式和無模式的行為簡單的演示。父視窗是wx.Frame物件帶有兩個按鈕。Click事件的第一個按鈕將顯示在模態的方式的對話方塊。因此,防止父視窗上的任何操作,直到對話方塊關閉。第二個按鈕,將顯示一個無模式對話方塊,這並不妨礙存取父視窗。第三個按鈕會顯示一個訊息框。
import wx class MyDialog(wx.Dialog): def __init__(self, parent, title): super(MyDialog, self).__init__(parent, title = title, size = (250,150)) panel = wx.Panel(self) self.btn = wx.Button(panel, wx.ID_OK, label = "ok", size = (50,20), pos = (75,50)) class Mywin(wx.Frame): def __init__(self, parent, title): super(Mywin, self).__init__(parent, title = title, size = (250,150)) self.InitUI() def InitUI(self): panel = wx.Panel(self) btn = wx.Button(panel, label = "Modal Dialog", pos = (75,10)) btn1 = wx.Button(panel, label = "Modeless Dialog", pos = (75,40)) btn2 = wx.Button(panel, label = "MessageBox", pos = (75,70)) btn.Bind(wx.EVT_BUTTON, self.OnModal) a = btn1.Bind(wx.EVT_BUTTON, self.OnModeless) print a btn2.Bind(wx.EVT_BUTTON, self.Onmsgbox) self.Centre() self.Show(True) def OnModal(self, event): a = MyDialog(self, "Dialog").ShowModal() print a def OnModeless(self, event): a = MyDialog(self, "Dialog").Show() def Onmsgbox(self, event): wx.MessageBox("This is a Message Box", "Message" ,wx.OK | wx.ICON_INFORMATION) ex = wx.App() Mywin(None,'Dialog Demo - www.tw511.com') ex.MainLoop()
wx.TextEntryDialog(parent, id, message, caption, value, style, pos)
在對話視窗傳遞的訊息引數要顯示的文字。caption 引數是要顯示在標題列的字串。在文字框中預設字串值value引數。TextCtrl在對話方塊可以設定顯示密碼字元(wx.TE_PASSWORD)和/或多行(wx.TE_MULTILINE)。
S.N. |
方法和說明
|
---|---|
1 |
SetMaxLength()
設定使用者可以輸入到文字框最大字元數
|
2 |
SetValue()
設定文字框的值程式設計
|
3 |
GetValue()
返回該文字框的內容
|
4 |
ShowModal()
顯示對話方塊模態。返回 wx.ID_OK 如果使用者確認輸入,以及 wx.ID_CANCEL 如果對話方塊被拒絕
|
self.text = wx.TextCtrl(pnl, size = (250, 25),style = wx.TE_READONLY) self.btn1 = wx.Button(pnl, label = "Enter Text")
self.Bind(wx.EVT_BUTTON, self.OnClick, self.btn1)
dlg = wx.TextEntryDialog(self, 'Enter Your Name','Text Entry Dialog')
if dlg.ShowModal() == wx.ID_OK: self.text.SetValue("Name entered:"+dlg.GetValue())
import wx class Mywin(wx.Frame): def __init__(self, parent, title): super(Mywin, self).__init__(parent, title = title,size = (300,200)) self.InitUI() def InitUI(self): self.count = 0 pnl = wx.Panel(self) vbox = wx.BoxSizer(wx.VERTICAL) hbox1 = wx.BoxSizer(wx.HORIZONTAL) hbox2 = wx.BoxSizer(wx.HORIZONTAL) self.text = wx.TextCtrl(pnl, size = (250, 25),style = wx.TE_READONLY) self.btn1 = wx.Button(pnl, label = "Enter Text") self.Bind(wx.EVT_BUTTON, self.OnClick, self.btn1) hbox1.Add(self.text, proportion = 1, flag = wx.ALIGN_CENTRE) hbox2.Add(self.btn1, proportion = 1, flag = wx.RIGHT, border = 10) vbox.Add((0, 30)) vbox.Add(hbox1, flag = wx.ALIGN_CENTRE) vbox.Add((0, 20)) vbox.Add(hbox2, proportion = 1, flag = wx.ALIGN_CENTRE) pnl.SetSizer(vbox) self.Centre() self.Show(True) def OnClick(self, e): dlg = wx.TextEntryDialog(self, 'Enter Your Name','Text Entry Dialog') if dlg.ShowModal() == wx.ID_OK: self.text.SetValue("Name entered:"+dlg.GetValue()) dlg.Destroy() ex = wx.App() Mywin(None,'TextEntry Demo - www.tw511.com') ex.MainLoop()
此類表示一個檔案選擇對話方塊。它使使用者可以瀏覽檔案系統並選擇要開啟檔案或儲存。對話方塊的外觀是由作業系統特定的。
wx.FileDialog(parent, message, DefaultDir, DefaultFile, wildcard, style, pos, size)
該訊息表示將要顯示的文字。 DefaultDir是初始目錄。一個或多個型別的檔案可以被設定為通過萬用字元引數所表示的檔案的過濾器。
S.N. |
引數和說明
|
---|---|
1 |
wx.FD_DEFAULT_STYLE
相當於wxFD_OPEN
|
2 |
wx.FD_OPEN
這是一個開啟的對話方塊;該對話方塊的預設按鈕的標籤是「開啟」
|
3 |
wx.FD_SAVE
這是一個儲存對話方塊;該對話方塊的預設按鈕的標籤是「儲存」
|
4 |
wx.FD_OVERWRITE_PROMPT
對於只儲存對話方塊:提示進行確認,如果一個檔案將被覆蓋
|
5 |
wx.FD_MULTIPLE
僅適用於開啟的對話方塊:允許選擇多個檔案
|
6 |
wx.FD_CHANGE_DIR
更改當前工作目錄到使用者選擇的檔案是目錄
|
S.N. |
函式與說明
|
---|---|
1 |
GetDirectory() 返回預設目錄 |
2 |
GetFileName() 返回預設檔案名 |
3 |
GetPath()
返回選定檔案的完整路徑
|
4 |
SetDirectory() 設定預設目錄 |
5 |
SetFilename() 設定預設檔案 |
6 |
SetPath() 設定檔案路徑 |
7 |
ShowModal()
顯示對話方塊,如果使用者單擊OK按鈕返回wx.ID_OK,否則 wx.ID_CANCEL
|
self.text = wx.TextCtrl(pnl, size = (-1,200), style = wx.TE_MULTILINE) self.btn1 = wx.Button(pnl, label = "Open a File")
self.Bind(wx.EVT_BUTTON, self.OnClick, self.btn1)
OnClick()函式顯示一個FileDialog的開啟模式。其選擇返回為dlg。通過GetPath()函式獲得的選定檔案和它的內容顯示在父視窗的TextCtrl框。
def OnClick(self, e): wildcard = "Text Files (*.txt)|*.txt" dlg = wx.FileDialog(self, "Choose a file", os.getcwd(), "", wildcard, wx.OPEN) if dlg.ShowModal() == wx.ID_OK: f = open(dlg.GetPath(), 'r') with f: data = f.read() self.text.SetValue(data)
import wx import os class Mywin(wx.Frame): def __init__(self, parent, title): super(Mywin, self).__init__(parent, title = title) self.InitUI() def InitUI(self): self.count = 0 pnl = wx.Panel(self) vbox = wx.BoxSizer(wx.VERTICAL) hbox1 = wx.BoxSizer(wx.HORIZONTAL) hbox2 = wx.BoxSizer(wx.HORIZONTAL) self.text = wx.TextCtrl(pnl, size = (-1,200),style = wx.TE_MULTILINE) self.btn1 = wx.Button(pnl, label = "Open a File") self.Bind(wx.EVT_BUTTON, self.OnClick, self.btn1) hbox1.Add(self.text, proportion = 1, flag = wx.ALIGN_CENTRE) hbox2.Add(self.btn1, proportion = 1, flag = wx.RIGHT, border = 10) vbox.Add(hbox2, proportion = 1, flag = wx.ALIGN_CENTRE) vbox.Add(hbox1, proportion = 1, flag = wx.EXPAND|wx.ALIGN_CENTRE) pnl.SetSizer(vbox) self.Centre() self.Show(True) def OnClick(self, e): wildcard = "Text Files (*.txt)|*.txt" dlg = wx.FileDialog(self, "Choose a file", os.getcwd(), "", wildcard, wx.OPEN) if dlg.ShowModal() == wx.ID_OK: f = open(dlg.GetPath(), 'r') with f: data = f.read() self.text.SetValue(data) dlg.Destroy() ex = wx.App() Mywin(None, 'FileDialog Demo - www.tw511.com') ex.MainLoop()
這個類的物件是一個字型選擇對話方塊。這個對話方塊的外觀也為作業系統特有的。屬性,例如名稱,大小,權重等。所選字型的形式返回作為此對話方塊的返回值。
wx.FontDialog(parent, data)
self.text = wx.StaticText(pnl, label = "hello") self.btn1 = wx.Button(pnl, label = "Choose Font")
def OnClick(self, e): dlg = wx.FontDialog(self,wx.FontData()) if dlg.ShowModal() == wx.ID_OK: data = dlg.GetFontData() font = data.GetChosenFont() self.text.SetFont(font) dlg.Destroy()
import wx import os class Mywin(wx.Frame): def __init__(self, parent, title): super(Mywin, self).__init__(parent, title = title, size = (400, 300)) self.InitUI() def InitUI(self): self.count = 0 pnl = wx.Panel(self) vbox = wx.BoxSizer(wx.VERTICAL) hbox1 = wx.BoxSizer(wx.HORIZONTAL) hbox2 = wx.BoxSizer(wx.HORIZONTAL) self.text = wx.StaticText(pnl, label = "hello") self.btn1 = wx.Button(pnl, label = "Choose Font") self.Bind(wx.EVT_BUTTON, self.OnClick, self.btn1) hbox1.Add(self.text, proportion = 1, flag = wx.ALIGN_CENTRE) hbox2.Add(self.btn1, proportion = 1, flag = wx.ALIGN_CENTRE, border = 10) vbox.Add(hbox2, flag = wx.ALIGN_CENTRE) vbox.Add(hbox1, proportion = 1, flag = wx.ALIGN_CENTRE) pnl.SetSizer(vbox) self.Centre() self.Show(True) def OnClick(self, e): dlg = wx.FontDialog(self,wx.FontData()) if dlg.ShowModal() == wx.ID_OK: data = dlg.GetFontData() font = data.GetChosenFont() self.text.SetFont(font) dlg.Destroy() ex = wx.App() Mywin(None,'FileDialog Demo - www.tw511.com') ex.MainLoop()
上面的程式碼產生下面的輸出 -