PyQt5 - 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 PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets 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 Output

QFileDialog Widget Outputs

QFileDialog

使用 exec_() 方法的完整程式碼如下:

import sys
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
class CustomDialog(QFileDialog):

   def __init__(self, *args, **kwargs):
      super(CustomDialog, self).__init__(*args, **kwargs)
      
      self.setWindowTitle("HELLO!")

      QBtn = QDialogButtonBox.Ok | QDialogButtonBox.Cancel

      self.buttonBox = QDialogButtonBox(QBtn)
      self.buttonBox.accepted.connect(self.accept)
      self.buttonBox.rejected.connect(self.reject)

      self.layout = QVBoxLayout()
      self.layout.addWidget(self.buttonBox)
      self.setLayout(self.layout)

class filedialogdemo(QWidget):
   def __init__(self, parent = None):

      super(filedialogdemo, self).__init__(parent)

      layout = QVBoxLayout()

      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 getfiles(self, s):
      print("click", s)
      dlg = CustomDialog(self)
      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

選定檔案中的文字將顯示在TextEdit控制元件中。

QFileDialog Widgets
pyqt_basic_widgets.htm
廣告
© . All rights reserved.