- PyQt5 教程
- PyQt5 - 首頁
- PyQt5 - 簡介
- PyQt5 - 新特性
- PyQt5 - Hello World
- PyQt5 - 主要類
- PyQt5 - 使用 Qt Designer
- PyQt5 - 訊號與槽
- PyQt5 - 佈局管理
- PyQt5 - 基本控制元件
- PyQt5 - QDialog 類
- PyQt5 - QMessageBox
- PyQt5 - 多文件介面
- PyQt5 - 拖放
- PyQt5 - 資料庫處理
- PyQt5 - 繪圖 API
- PyQt5 - BrushStyle 常量
- PyQt5 - QClipboard
- PyQt5 - QPixmap 類
- PyQt5 有用資源
- PyQt5 - 快速指南
- PyQt5 - 有用資源
- PyQt5 - 討論
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()
以上程式碼產生以下輸出:
使用 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()
以上程式碼產生以下輸出:
選定檔案中的文字將顯示在TextEdit控制元件中。
pyqt_basic_widgets.htm
廣告