一、前言
QFileDialog小部件是一个文件选择器对话框。它使用户能够浏览文件系统并选择要打开或保存的文件。对话框通过静态函数或调用调用exec_()对话框对象上的函数。
二、学习目标
1.QFileDialog常用方法
2.QFileDialog常用信号
3.QFileDialog组件的应用
三、知识点
1.【QFileDialog常用方法】
方法 | 描述 |
---|---|
getOpenFileName() | 选择文件。 4个参数分别是父控件、标题、起始路径、文件扩展名过滤。返回值是由两个字符串构成的元组。元组第一个元素是文件名,第二个是文件类型名;返回文件路径、文件类型 |
getExistingDirectory() | 选择文件夹。 3个参数分别是父控件、标题、起始路径。返回值是字符串;返回文件夹路径 |
getSaveFileName() | 文件保存。 4个参数分别是父控件、标题、起始路径、文件扩展名过滤。返回值是由两个字符串构成的元组。元组第一个元素是文件名,第二个是文件类型名。 |
setAcceptMode() | 确定文件框是作为打开还是保存对话框 QFileDialog.AcceptOpen:打开文件 QFileDialog.AcceptSave:保存文件 |
setFileMode() | 可选择文件的类型。枚举常量是 : QFileDialog.AnyFile:文件名,不管它是否存在。 QFileDialog.ExistingFile:单个现有文件的名称。 QFileDialog.Directory:目录的名称。 显示文件和目录。 QFileDialog.ExistingFiles:零个或多个现有文件的名称。 |
setDirectory() | 设置打开时的目录 |
selectedFiles() | 获取选择的文件列表 |
setNameFilter() | 设置文件名过滤,如:Images (*.py *.xpm *.jpg) |
2.【QFileDialog常用信号】
QFileDialog组件一般不需要用到信号。
信号 | 描述 |
---|---|
currentChanged(path) | 当当前文件更改以进行本地操作时,会发出此信号,并将新文件名作为路径参数。 |
currentUrlChanged(url) | 当当前文件更改时,会发出此信号,并将新文件 URL 作为 url 参数。 |
directoryEntered(directory) | 当用户进入目录时,会发出此信号用于本地操作。 |
directoryUrlEntered(directory) | 当用户进入目录时会发出这个信号。 |
fileSelected(file) | 当本地操作的选择发生变化并且对话框被接受时,该信号与选定文件一起发出。 |
filesSelected(files) | 当本地操作的选择发生变化并且对话框被接受时,该信号与所选文件的列表一起发出。 |
filterSelected(filter) | 当用户选择过滤器时会发出此信号。 |
urlSelected(url) | 当选择更改且对话框被接受时,此信号将与所选 url 一起发出。 |
urlsSelected(urls) | 当选择更改且对话框被接受时,此信号将与所选 URL 列表一起发出。 |
3.【QFileDialog组件的应用】
import os
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QPushButton, QFileDialog
class QmyWidget(QWidget):
def __init__(self, parent=None):
super().__init__(parent) # 调用父类的构造函数,创建QWidget窗体
self.setupUi()
def setupUi(self):
"""页面初始化"""
# 设置窗体大小及标题
self.resize(500, 400)
self.setWindowTitle("QFileDialog组件示例")
# 创建布局
self.layout = QVBoxLayout()
# 创建两个按钮组件
self.button1 = QPushButton("选择文件", self)
self.button1.clicked.connect(self.select_file) # 为button绑定消息对话框
self.button2 = QPushButton("选择文件夹", self)
self.button2.clicked.connect(self.select_dir) # 为button绑定消息对话框
self.button3 = QPushButton("保存文件", self)
self.button3.clicked.connect(self.save_file) # 为button绑定消息对话框
# 将组件添加到布局中
self.layout.addWidget(self.button1)
self.layout.addWidget(self.button2)
self.layout.addWidget(self.button3)
# 为窗体添加布局
self.setLayout(self.layout)
def select_file(self):
"""选择文件对话框"""
# QFileDialog组件定义
fileDialog = QFileDialog(self)
# QFileDialog组件设置
fileDialog.setWindowTitle("标题") # 设置对话框标题
fileDialog.setFileMode(QFileDialog.AnyFile) # 设置能打开文件的格式
fileDialog.setDirectory(r'D:\01MyCode\01DemoCode\pyqt5_widgets\img') # 设置默认打开路径
fileDialog.setNameFilter("Images (*.png *.xpm *.jpg)") # 按文件名过滤
file_path = fileDialog.exec() # 窗口显示,返回文件路径
if file_path and fileDialog.selectedFiles():
print("选择文件成功:{}".format(fileDialog.selectedFiles()[0]))
# 方式二
# file_path, file_type = QFileDialog.getOpenFileName(self, '标题', os.getcwd(), 'Images (*.png *.xpm *.jpg)')
# if file_path and file_type:
# print("选择文件成功:{}".format(file_path))
def select_dir(self):
"""选择文件夹对话框架"""
dir_path = QFileDialog.getExistingDirectory(self, '标题', os.getcwd())
if dir_path:
print("选择文件夹成功:{}".format(dir_path))
def save_file(self):
"""文件另存对话框"""
file_path, file_type = QFileDialog.getSaveFileName(self, '标题', os.getcwd(), 'All Files (*)')
if file_path and file_type:
content = '这是一段文本'
with open(file_path, 'w', encoding='utf-8') as f:
f.write(content)
print("保存文件成功:{}".format(file_path))
if __name__ == '__main__':
app = QApplication(sys.argv)
myMain = QmyWidget()
myMain.show()
sys.exit(app.exec_())
-
关键代码
# QFileDialog组件定义 fileDialog = QFileDialog(self) # QFileDialog组件设置 fileDialog.setWindowTitle("标题") # 设置对话框标题 fileDialog.setFileMode(QFileDialog.AnyFile) # 设置能打开文件的格式 fileDialog.setDirectory(r'D:\01MyCode\01DemoCode\pyqt5_widgets\img') # 设置默认打开路径 fileDialog.setNameFilter("Images (*.png *.xpm *.jpg)") # 按文件名过滤 file_path = fileDialog.exec() # 窗口显示,返回文件路径 if file_path and fileDialog.selectedFiles(): print("选择文件成功:{}".format(fileDialog.selectedFiles()[0])) # 方式二 # file_path, file_type = QFileDialog.getOpenFileName(self, '标题', os.getcwd(), 'Images (*.png *.xpm *.jpg)') # if file_path and file_type: # print("选择文件成功:{}".format(file_path))