1. wx.FileDialog 允許用戶從系統的文件中選擇一個或者多個文件。支持通配符,可以讓用戶選擇關心的文件。例如:"BMP files (*.bmp)|*.bmp|GIF files (*.gif)|*.gif"只會顯示和選擇圖片后綴類型是bmp 和gif。
2. Window Styles
| wx.FD_OPEN | 單個文件選擇對話框 |
| wx.FD_SAVE | 文件保存對話框 |
| wx.FD_OVERWRITE_PROMPT | 只對於保存對話框有效,當覆蓋文件的時候,會彈出提醒對話框 |
| wx.FD_MULTIPLE | 只對於打開對話框有效,支持多選 |
| wx.FD_CHANGE_DIR | 改變當前工作目錄為用戶選擇的文件夾 |
3. 方法集:
| Method Summary | |
|---|---|
| FileDialog |
|
| String | 返回默認的文件夾 |
| String | 獲得默認的文件名字 |
| PyObject | 返回用戶選擇的文件列表 |
| int | Returns the index into the list of filters supplied, optionally, in the wildcard parameter. |
| String | 返回文件對話框標題 |
| String | 返回選擇的文件的全路徑(包括文件路徑和文件名) |
| PyObject | 多選情況下,返回用戶選擇的文件全路徑列表 |
| String | 返回通配符 |
設置默認的文件目錄 |
|
設置默認的文件名 |
|
Sets the default filter index, starting from zero. |
|
設置對話框的標題 |
|
設置默認選擇的文件全路徑名 |
|
設計通配符 |
|
4.例子:
a.創建app主入口程序
#-*- coding: UTF-8 -*- #------------------------------------------------------------------------------- # Name: 模塊shell # Purpose: 應用程序的main入口函數 # # Author: ankier # # Created: 28-10-2012 # Copyright: (c) ankier 2012 # Licence: <your licence> #------------------------------------------------------------------------------- import wx from mainFrame import MainFrame import sys ## @detail ShellApp主應用程序的核 class ShellApp(wx.App): def OnInit(self): mainFrame = MainFrame() mainFrame.Show(True) return True # @detail main程序的主入口程序 if __name__ == '__main__': app = ShellApp() #重新定向wxpython的輸出輸入和錯誤輸出到系統標准輸入輸出 sys.stdin = sys.__stdin__ sys.stdout = sys.__stdout__ sys.stderr = sys.__stderr__ app.MainLoop()
b.MainFrame 文件選擇對話框的使用
#-*- coding: UTF-8 -*- #------------------------------------------------------------------------------- # Name: 模塊mainFrame # Purpose: 應用程序的主界面 # # Author: ankier # # Created: 28-10-2012 # Copyright: (c) ankier 2012 # Licence: <your licence> #------------------------------------------------------------------------------- import wx import os ## @detail MainFrame主界面窗口類 class MainFrame(wx.Frame): def __init__(self): wx.Frame.__init__(self, None, wx.ID_ANY, 'FileDialog study', pos=wx.DefaultPosition, size=(800, 600), style=wx.DEFAULT_FRAME_STYLE) self.CreateStatusBar() self.__BuildMenus() label = wx.StaticText(self, -1, u"當前選擇的文件") textBox = wx.TextCtrl(self, -1, style = wx.TE_MULTILINE, size =(-1, 300)) sizer = wx.BoxSizer(wx.HORIZONTAL) sizer.Add(label, 0, wx.ALL|wx.ALIGN_CENTRE) sizer.Add(textBox, 1, wx.ALL|wx.ALIGN_CENTRE) self.__TextBox = textBox self.SetSizerAndFit(sizer) def __BuildMenus(self): mainMenuBar = wx.MenuBar() fileMenu = wx.Menu() fileMenuItem = fileMenu.Append(-1, "打開單個文件") self.Bind(wx.EVT_MENU, self.__OpenSingleFile, fileMenuItem) saveMenuItem = fileMenu.Append(-1, "保存文件") self.Bind(wx.EVT_MENU, self.__SaveFile, saveMenuItem) savePromptMenuItem = fileMenu.Append(-1, "保存文件及提示覆蓋") self.Bind(wx.EVT_MENU, self.__SavePromptFile, savePromptMenuItem) multipleOpenMenuItem = fileMenu.Append(-1, "多文件選擇") self.Bind(wx.EVT_MENU, self.__MultipleSelectFiles, multipleOpenMenuItem) mainMenuBar.Append(fileMenu, title =u'&文件') self.SetMenuBar(mainMenuBar) ## @detail wx.FileDialog style:wx.FD_OPEN def __OpenSingleFile(self, event): filesFilter = "Dicom (*.dcm)|*.dcm|" "All files (*.*)|*.*" fileDialog = wx.FileDialog(self, message ="選擇單個文件", wildcard = filesFilter, style = wx.FD_OPEN) dialogResult = fileDialog.ShowModal() if dialogResult != wx.ID_OK: return path = fileDialog.GetPath() self.__TextBox.SetLabel(path) ## @detail wx.FileDialog style:wx.FD_SAVE def __SaveFile(self, event): filesFilter = "Dicom (*.dcm)|*.dcm|" "All files (*.*)|*.*" fileDialog = wx.FileDialog(self, message ="保存文件", wildcard = filesFilter, style = wx.FD_SAVE) dialogResult = fileDialog.ShowModal() if dialogResult != wx.ID_OK: return path = fileDialog.GetPath() self.__TextBox.SetLabel(path) ## @detail wx.FileDialog style:wx.FD_SAVE | wx.FD_OVERWRITE_PROMPT def __SavePromptFile(self, event): filesFilter = "Dicom (*.dcm)|*.dcm|" "All files (*.*)|*.*" fileDialog = wx.FileDialog(self, message ="保存&prompt文件", wildcard = filesFilter, style = wx.FD_SAVE|wx.FD_OVERWRITE_PROMPT) dialogResult = fileDialog.ShowModal() if dialogResult != wx.ID_OK: return path = fileDialog.GetPath() self.__TextBox.SetLabel(path) ## @detail wx.FileDialog style:wx.FD_OPEN | wx.FD_MULTIPLE def __MultipleSelectFiles(self, event): filesFilter = "Dicom (*.dcm)|*.dcm|" "All files (*.*)|*.*" fileDialog = wx.FileDialog(self, message ="多文件選擇", wildcard = filesFilter, style = wx.FD_OPEN|wx.FD_MULTIPLE) dialogResult = fileDialog.ShowModal() if dialogResult != wx.ID_OK: return paths = fileDialog.GetPaths() self.__TextBox.SetLabel('') for path in paths: self.__TextBox.AppendText(path+'\n')
