PyQt - QFileDialog 元件



此元件是一個檔案選擇對話方塊。它允許使用者瀏覽檔案系統並選擇要開啟或儲存的檔案。該對話方塊可以透過靜態函式或呼叫對話方塊物件的 exec_() 函式來呼叫。

QFileDialog 類的靜態函式 (getOpenFileName() 和 getSaveFileName()) 呼叫當前作業系統的原生檔案對話方塊。

還可以應用檔案過濾器以僅顯示指定副檔名的檔案。還可以設定起始目錄和預設檔名。

QFileDialog 類重要的方法和列舉列在下面的表格中:

序號 方法及描述
1

getOpenFileName()

返回使用者選擇要開啟的檔名

2

getSaveFileName()

使用使用者選擇的檔名儲存檔案

3

setacceptMode()

確定檔案框是充當開啟對話方塊還是儲存對話方塊

QFileDialog.AcceptOpen

QFileDialog.AcceptSave

4

setFileMode()

可選擇檔案的型別。列舉常量為:

QFileDialog.AnyFile

QFileDialog.ExistingFile

QFileDialog.Directory

QFileDialog.ExistingFiles

5

setFilter()

僅顯示具有指定副檔名的檔案

示例

以下示例演示了呼叫檔案對話方塊的兩種方法。

第一個按鈕透過靜態方法呼叫檔案對話方塊。

fname = QFileDialog.getOpenFileName(self, 'Open file', 
   'c:\\',"Image files (*.jpg *.gif)")

選定的影像檔案顯示在標籤元件上。第二個按鈕透過在 QFileDialog 物件上呼叫 exec_() 方法來呼叫檔案對話方塊。

dlg = QFileDialog()
dlg.setFileMode(QFileDialog.AnyFile)
dlg.setFilter("Text files (*.txt)")
filenames = QStringList()

   if dlg.exec_():
      filenames = dlg.selectedFiles()

選定檔案的內容顯示在TextEdit元件中。

f = open(filenames[0], 'r')
   with f:
      data = f.read()
      self.contents.setText(data)

完整程式碼如下:

import sys
from PyQt4.QtCore import *
from PyQt4.QtGui import *

class filedialogdemo(QWidget):
   def __init__(self, parent = None):
      super(filedialogdemo, self).__init__(parent)
		
      layout = QVBoxLayout()
      self.btn = QPushButton("QFileDialog static method demo")
      self.btn.clicked.connect(self.getfile)
		
      layout.addWidget(self.btn)
      self.le = QLabel("Hello")
		
      layout.addWidget(self.le)
      self.btn1 = QPushButton("QFileDialog object")
      self.btn1.clicked.connect(self.getfiles)
      layout.addWidget(self.btn1)
		
      self.contents = QTextEdit()
      layout.addWidget(self.contents)
      self.setLayout(layout)
      self.setWindowTitle("File Dialog demo")
		
   def getfile(self):
      fname = QFileDialog.getOpenFileName(self, 'Open file', 
         'c:\\',"Image files (*.jpg *.gif)")
      self.le.setPixmap(QPixmap(fname))
		
   def getfiles(self):
      dlg = QFileDialog()
      dlg.setFileMode(QFileDialog.AnyFile)
      dlg.setFilter("Text files (*.txt)")
      filenames = QStringList()
		
      if dlg.exec_():
         filenames = dlg.selectedFiles()
         f = open(filenames[0], 'r')
			
         with f:
            data = f.read()
            self.contents.setText(data)
				
def main():
   app = QApplication(sys.argv)
   ex = filedialogdemo()
   ex.show()
   sys.exit(app.exec_())
	
if __name__ == '__main__':
   main()

以上程式碼產生以下輸出:

QFileDialog Widget Output1 QFileDialog Widget Output2
廣告
© . All rights reserved.