iT邦幫忙

2022 iThome 鐵人賽

DAY 18
0
Software Development

實戰 Python x PyQt5 軟體介面設計系列 第 18

( Day 18 ) QFileDialog 選擇檔案對話視窗

  • 分享至 

  • xImage
  •  

QFileDialog 是 PyQt5 裡負責選擇檔案的對話視窗元件,通常會搭配按鈕或選單進行開啟檔案的動作,這篇教學會介紹如何在 PyQt5 視窗裡加入 QFileDialog 選擇檔案對話視窗,最後還會使用內建函式 open 搭配 QPlainTextEdit 顯示開啟檔案的內容。

原文參考:QFileDialog 選擇檔案對話視窗

因為 Google Colab 不支援 PyQt5,所以請使用本機環境 ( 參考:使用 Python 虛擬環境 ) 或使用 Anaconda Jupyter 進行實作 ( 參考:使用 Anaconda )。

Python 教學 - QFileDialog 選擇檔案對話視窗

使用 QFileDialog 選擇檔案對話視窗

建立 PyQt5 視窗物件後,先透過 QtWidgets.QPushButton(widget) 方法加入按鈕,使用 clicked.connect() 綁定點擊按鈕時的函式,在函式中使用 QtWidgets.QFileDialog.getOpenFileNames() 方法,就可以在點擊按鈕時,開啟選擇檔案的對話視窗,選擇並選擇檔案後,會回傳兩個值,第一個值是檔案的路徑,第二個值則是檔案篩選器的類型 ( 預設是 All Files )

from PyQt5 import QtWidgets
import sys
app = QtWidgets.QApplication(sys.argv)

Form = QtWidgets.QWidget()
Form.setWindowTitle('oxxo.studio')
Form.resize(300, 200)

def open():
    filePath , filterType = QtWidgets.QFileDialog.getOpenFileNames()  # 選擇檔案對話視窗
    print(filePath , filterType)

btn = QtWidgets.QPushButton(Form)  # 加入按鈕
btn.move(20, 20)
btn.setText('開啟檔案')
btn.clicked.connect(open)

Form.show()
sys.exit(app.exec_())

Python 教學 - QFileDialog 選擇檔案對話視窗

QFileDialog 選擇檔案的方法

使用 QFileDialog 可以透過三種方式選擇檔案:

方法 說明
getOpenFileName() 選擇單一檔案。
getOpenFileNames() 選擇多個檔案,回傳值以串列表示。
getExistingDirectory() 選擇一個資料夾。

下方的程式碼執行後,會在畫面中放入兩個按鈕,其中一個可以選取多個檔案,另外一個可以選取指定的資料夾。

from PyQt5 import QtWidgets
import sys
app = QtWidgets.QApplication(sys.argv)

Form = QtWidgets.QWidget()
Form.setWindowTitle('oxxo.studio')
Form.resize(300, 200)

def openFiles():
    filePath, filterType = QtWidgets.QFileDialog.getOpenFileNames()  # 選取多個檔案
    print(filePath, filterType )

def openFolder():
    folderPath = QtWidgets.QFileDialog.getExistingDirectory()        # 選取特定資料夾
    print(folderPath)

btn1 = QtWidgets.QPushButton(Form)
btn1.move(20, 20)
btn1.setText('開啟檔案')
btn1.clicked.connect(openFiles)

btn2 = QtWidgets.QPushButton(Form)
btn2.move(120, 20)
btn2.setText('開啟資料夾')
btn2.clicked.connect(openFolder)

Form.show()
sys.exit(app.exec_())

QFileDialog 參數設定

使用 QFileDialog 開啟檔案時,可以設定四個參數:

參數 說明
parent 父元件。
caption 對話視窗標題。
directory 開啟目錄 ( 如果沒有設定則使用 py 檔案所在目錄 )。
filter 檔案篩選器,寫法參考:TXT (*.txt)。

下方的程式碼執行後,對話視窗會開啟 test 資料夾,並限定只能選擇 txt 檔案。

from PyQt5 import QtWidgets
import sys
app = QtWidgets.QApplication(sys.argv)

Form = QtWidgets.QWidget()
Form.setWindowTitle('oxxo.studio')
Form.resize(300, 200)

def open():
    filename , filetype = QtWidgets.QFileDialog.getOpenFileNames(directory='test', filter='TXT (*.txt)')
    print(filename, filetype)

btn = QtWidgets.QPushButton(Form)
btn.move(20, 20)
btn.setText('開啟檔案')
btn.clicked.connect(open)

Form.show()
sys.exit(app.exec_())

Python 教學 - QFileDialog 選擇檔案對話視窗

開啟 txt 檔案並顯示內容

能夠取得檔案路徑後,就能透過 open 內建函式開啟檔案,並搭配 QPlainTextEdit 多行輸入框元件顯示開啟的檔案內容。

from PyQt5 import QtWidgets
import sys
app = QtWidgets.QApplication(sys.argv)

Form = QtWidgets.QWidget()
Form.setWindowTitle('oxxo.studio')
Form.resize(300, 300)

def show():
    filePath , filetype = QtWidgets.QFileDialog.getOpenFileName(filter='TXT (*.txt)')
    file = open(filePath,'r')      # 根據檔案路徑開啟檔案
    text = file.read()             # 讀取檔案內容
    input.setPlainText(text)       # 設定變數為檔案內容
    file.close()                   # 關閉檔案

input = QtWidgets.QPlainTextEdit(Form)  # 放入多行輸入框
input.move(10,50)

btn = QtWidgets.QPushButton(Form)
btn.move(10, 10)
btn.setText('開啟檔案')
btn.clicked.connect(show)

Form.show()
sys.exit(app.exec_())

Python 教學 - QFileDialog 選擇檔案對話視窗

更多 Python 教學

大家好,我是 OXXO,是個即將邁入中年的斜槓青年,我已經寫了超過 400 篇 Python 的教學,有興趣可以參考下方連結呦~ ^_^


上一篇
( Day 17 ) QProgressBar 進度條
下一篇
( Day 19 ) QMessageBox 對話視窗
系列文
實戰 Python x PyQt5 軟體介面設計35
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言