天天看點

Python操作檔案對話框——wxPython

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