Python操作檔案對話框——wxPython
前段時間學習操作excel的時候就想找一個操作檔案對話框的方法,網上搜了很多都是借助tinker打開的,這種方式我感覺運作稍稍有些慢了,而且會有一個額外的root視窗,當然可以關閉,但比較繁瑣。涉及到多檔案選擇的情況也沒辦法去處理。
今天在看wxpython子產品,發現也有檔案對話框操作,而且比較簡潔好用,是以在這裡記錄一下。
依賴:
pip install wxpython
1、建立app和frame對象
app = wx.App()
frame = wx.Frame(None, title="", pos=(0, 0), size=(100, 100))
這一步隻是因為wx.FileDialog方法需要基于父容器對象建立,這裡我選擇建立一個frame,這裡的pos、size等參數設定什麼值都可以,主要是建立這樣一個對象。不會存在多餘的視窗。
注意:app對象必須先建立且必須有變量接受,不然會出現下面的錯誤。
wx._core.PyNoAppError: The wx.App object must be created first!
2、建立檔案對話框
dlg = wx.FileDialog(parent=frame, message="多檔案選擇",
defaultDir=os.getcwd(),
style=wx.FD_MULTIPLE,
wildcard="All files*.*|*.*")
參數說明:
- parent:父容器,這裡使用上面建立的frame
- message:對話框标題
- defaultDir:預設目錄
- defaultFile:預設檔案
- wildcard:檔案過濾器, 格式其實很簡單 “顯示名稱|比對類型”為一組,設定多組時繼續用 | 隔開就好。
- style:檔案對話框類型
類型 | 說明 |
---|---|
wx.FD_OPEN | 檔案選擇對話框,用于單檔案選擇 |
wx.FD_MULTIPLE | 檔案選擇對話框,用于多檔案選擇 |
wx.FD_CHANGE_DIR | 檔案選擇對話框,使用者選擇檔案後會改變預設目錄 |
wx.FD_SAVE | 檔案儲存對話框,用于多檔案選擇 |
wx.FD_OVERWRITE_PROMPT | 搭配檔案儲存對話框使用,檔案已存在時會提示覆寫 |
wx.FD_OVERWRITE_PROMPT例: wx.FD_SAVE | wx.FD_OVERWRITE_PROMPT
3、顯示對話框,擷取選擇的檔案
if dlg.ShowModal() == wx.ID_OK:
filename = dlg.GetPaths()
print(filename)
dlg.Destroy()
注意:dlg.GetPaths方法隻能在wx.FD_MULTIPLE類型時才能使用,單檔案選擇需要使用dlg.GetPath方法。
其實已經有了很多wxpython檔案操作的部落格,但是大部分都是基于內建wx.frame來操作的,當我們隻需要選擇檔案擷取路徑時,像我這樣操作就已經可以了。
完整代碼:
import os
import wx
app = wx.App()
def openFileDialog(style=wx.FD_OPEN, message="選擇檔案", defaultDir=os.getcwd(), wildcard="All files(*.*)|*.*"):
frame = wx.Frame(None, title="", pos=(0, 0), size=(100, 100))
dlg = wx.FileDialog(parent=frame, message=message,
defaultDir=defaultDir,
style=style,
wildcard=wildcard)
if dlg.ShowModal() == wx.ID_OK:
if style == wx.FD_MULTIPLE:
return dlg.GetPaths()
return dlg.GetPath()
dlg.Destroy()
return None
print(openFileDialog(wx.FD_SAVE|wx.FD_OVERWRITE_PROMPT))
我這裡稍微封裝了一下,傳回選擇的路徑。
歡迎大家留言探讨。
總結參考部落格:https://blog.csdn.net/weixin_30871293/article/details/96099514
更多參考:https://www.cnblogs.com/math98/p/14221551.html