前言
QFileDialog是用来打开和保存文件的标准对话框,QFileDialog类继承自QDialog类。
一、常用方法
QFileDialog类常用方法如下表所示:
方法 | 描述 |
---|---|
getOpenFileName() | 返回用户所选择的文件名,并打开文件 |
getSaveFileName() | 使用用户所选择的文件名,并保存文件 |
setFileMode() | 可以选择的文件类型,枚举常量是:QFileDialog.AnyFile(任何文件)、QFileDialog.Directory(文件目录)、QFileDialog.ExistingFile(已存在的文件)、QFileDialog.ExistingFiles(已存在的多个文件) |
setFilter() | 设置过滤器,只显示过滤器允许的文件类型 |
二、示例
1. 脚本代码
QFileDialog_UI.py
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'Test_0110_FDialog.ui'
#
# Created by: PyQt5 UI code generator 5.15.4
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again. Do not edit this file unless you know what you are doing.
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_Form(object):
def setupUi(self, Form):
Form.setObjectName("Form")
Form.resize(420, 350)
self.lblImage = QtWidgets.QLabel(Form)
self.lblImage.setGeometry(QtCore.QRect(100, 40, 241, 101))
self.lblImage.setText("")
self.lblImage.setObjectName("lblImage")
self.textEdit = QtWidgets.QTextEdit(Form)
self.textEdit.setGeometry(QtCore.QRect(100, 190, 241, 151))
self.textEdit.setObjectName("textEdit")
self.btnText = QtWidgets.QPushButton(Form)
self.btnText.setGeometry(QtCore.QRect(100, 160, 241, 21))
self.btnText.setObjectName("btnText")
self.btnImage = QtWidgets.QPushButton(Form)
self.btnImage.setGeometry(QtCore.QRect(100, 10, 241, 21))
self.btnImage.setObjectName("btnImage")
self.retranslateUi(Form)
QtCore.QMetaObject.connectSlotsByName(Form)
def retranslateUi(self, Form):
_translate = QtCore.QCoreApplication.translate
Form.setWindowTitle(_translate("Form", "Form"))
self.btnText.setText(_translate("Form", "加载文本文件"))
self.btnImage.setText(_translate("Form", "加载图片"))
QFileDialog_main.py
from PyQt5.QtCore import QDir
from PyQt5.QtGui import QPixmap
from PyQt5.QtWidgets import QWidget, QApplication, QFileDialog
from QFileDialog_UI import Ui_Form
class MymainWindow(QWidget):
def __init__(self):
super().__init__()
self.ui = Ui_Form()
self.ui.setupUi(self)
self.setWindowTitle('文件对话框demo')
self.ui.btnImage.clicked.connect(self.get_imagefile)
self.ui.btnText.clicked.connect(self.get_textfile)
def get_imagefile(self):
'''
第一个参数 指定父组件
第二个参数 对话框的标题
第三个参数 对话框默认打开的目录 (./ 表示当前盘下的根目录 . 表示程序运行目录)
第四个参数 文件扩展名过滤器 (image files (*.png) 只能显示扩展名为.png 的图片)
'''
# QFileDialog.getOpenFileName() 返回值是元组形式。元组以逗号隔开,当只有一个元素时,外有小括号
fname1, _ = QFileDialog.getOpenFileName(self, '打开图片文件', './', 'image files (*.png)')
self.ui.lblImage.setPixmap(QPixmap(fname1)) # 标签上贴图 QPixmap()类传递的参数是要求数据类型为元组
def get_textfile(self):
dlg = QFileDialog()
dlg.setFilter(QDir.Files)
# 使用文件对话框(QFileDialog)的对象exec_()方法来选择文件
if dlg.exec_():
fname2 = dlg.selectedFiles()
# 1.写法一
# f = open(fname2[0], 'r')
# with f:
# data = f.read()
# self.ui.textEdit.setText(data)
# 2.写法二
with open(fname2[0], 'r') as f:
data = f.read()
# 将读取的文本显示在文本编辑控件中
self.ui.textEdit.setText(data)
if __name__ == '__main__':
import sys
app = QApplication(sys.argv)
MainWindow = MymainWindow()
MainWindow.show()
sys.exit(app.exec_())
2. 显示效果
- 第一个对话框只允许打开图片文件,并且把所加载的图片显示在QLabel()标签中
- 第二个对话框打开当前目录,弹出的对话框选择文本文件并显示在文本框QTextEdit()内
点击加载图片和文本文件按钮