QFileDialog 文件选择对话框
静态方法(最简单的获取方式)
# 单文件选择对话框
# 打开单文件选择对话框,返回包含str类型文件全路径和文件过滤器选项的元组
getOpenFileName(self, parent, caption, directory, filter, initialFilter, options, QFileDialog_Options, QFileDialog_Option, *args, **kwargs)
# getOpenFileName(parent: QWidget = None, caption: str = '', directory: str = '', filter: str = '', initialFilter: str = '', options: Union[QFileDialog.Options, QFileDialog.Option] = 0) -> Tuple[str, str]
# 打开单文件选择对话框,返回包含QUrl类型文件全路径和文件过滤器选项的元组
getOpenFileUrl(self, parent, caption, directory, *args, **kwargs)
# getOpenFileUrl(parent: QWidget = None, caption: str = '', directory: str = '', filter: str = '', initialFilter: str = '', options: Union[QFileDialog.Options, QFileDialog.Option] = 0, supportedSchemes: Iterable[str] = []) -> Tuple[QUrl, str]
# 多文件选择对话框
# 打开多文件选择对话框,返回包含所有str类型文件全路径的列表和文件过滤器选项的元组
getOpenFileNames(self, parent, caption, directory, filter, initialFilter, options, QFileDialog_Options, QFileDialog_Option, *args, **kwargs)
# getOpenFileNames(parent: QWidget = None, caption: str = '', directory: str = '', filter: str = '', initialFilter: str = '', options: Union[QFileDialog.Options, QFileDialog.Option] = 0) -> Tuple[List[str], str]
# 打开多文件选择对话框,返回包含所有QUrl类型文件全路径的列表和文件过滤器选项的元组
getOpenFileUrls(self, parent, caption, directory, *args, **kwargs)
# getOpenFileUrls(parent: QWidget = None, caption: str = '', directory: str = '', filter: str = '', initialFilter: str = '', options: Union[QFileDialog.Options, QFileDialog.Option] = 0, supportedSchemes: Iterable[str] = []) -> Tuple[List[QUrl], str]
# 文件保存对话框
# 打开文件保存对话框,返回包含str类型的保存文件全路径和文件过滤器选项的元组
getSaveFileName(self, parent, caption, directory, filter, initialFilter, options, QFileDialog_Options, QFileDialog_Option, *args, **kwargs)
# getSaveFileName(parent: QWidget = None, caption: str = '', directory: str = '', filter: str = '', initialFilter: str = '', options: Union[QFileDialog.Options, QFileDialog.Option] = 0) -> Tuple[str, str]
# 打开文件保存对话框,返回包含QUrl类型的保存文件全路径和文件过滤器选项的元组
getSaveFileUrl(self, parent, caption, directory, *args, **kwargs)
# getSaveFileUrl(parent: QWidget = None, caption: str = '', directory: str = '', filter: str = '', initialFilter: str = '', options: Union[QFileDialog.Options, QFileDialog.Option] = 0, supportedSchemes: Iterable[str] = []) -> Tuple[QUrl, str]
# 参数说明
# parent:父对象
# caption:对话框标题
# directory:默认打开路径
# filter:文件类型过滤器
# initialFilter:默认过滤文件类型
# options:选项控制
# 文件夹选择对话框,返回str类型的所选择的文件夹路径
getExistingDirectory(self, parent, caption, directory, options, QFileDialog_Options, QFileDialog_Option, *args, **kwargs)
# getExistingDirectory(parent: QWidget = None, caption: str = '', directory: str = '', options: Union[QFileDialog.Options, QFileDialog.Option] = QFileDialog.ShowDirsOnly) -> str
# 文件夹选择对话框,返回QUrl类型的所选择的文件夹路径
getExistingDirectoryUrl(self, parent, caption, directory, *args, **kwargs)
# getExistingDirectoryUrl(parent: QWidget = None, caption: str = '', directory: QUrl = QUrl(), options: Union[QFileDialog.Options, QFileDialog.Option] = QFileDialog.ShowDirsOnly, supportedSchemes: Iterable[str] = []) -> QUrl
# 参数说明
# parent:父对象
# caption:对话框标题
# directory:默认打开路径
# options:选项控制
名称1(*.jpg *.png);;名称2(*.py)
构造函数
# 创建对象的同时设置父对象、设置选项控制
QFileDialog(QWidget, Union[Qt.WindowFlags, Qt.WindowType])
# 创建对象的同时设置父对象、对话框标题、默认路径、文件过滤器
QFileDialog(parent: QWidget = None, caption: str = '', directory: str = '', filter: str = '')
打开对话框
open(self)
open(PYQT_SLOT) # 打开后, 会自动连接 filesSelected 信号与此处指定的槽函数PYQT_SLOT
exec() -> int # 返回用户是否按下确定按钮
接收模式
setAcceptMode(QFileDialog.AcceptMode) # 设置接收模式
# 参数:QFileDialog.AcceptMode
# QFileDialog.AcceptOpen # 打开模式
# QFileDialog.AcceptSave # 保存模式
acceptMode() -> QFileDialog.AcceptMode # 获取接收模式
默认保存后缀
setDefaultSuffix(str) # 设置默认保存后缀
defaultSuffix() -> str # 获取默认保存后缀
设置文件模式
setFileMode(QFileDialog.FileMode) # 设置文件模式
# 参数:QFileDialog.FileMode
# QFileDialog.AnyFile # 选择单个文件对话框模式(不管文件是否存在,可以直接输入文件名打开不报错)
# QFileDialog.ExistingFile # 选择单个现有文件对话框模式(文件是不存在,直接输入文件名打开会报错)
# QFileDialog.ExistingFiles # 选择多个文件对话框模式
# QFileDialog.Directory # 选择文件夹对话框模式(显示文件名和文件夹名)
# Windows文件对话框不支持在目录选择器中显示文件。
fileMode() -> QFileDialog.FileMode # 获取文件模式
设置文件过滤器
setNameFilter(str) # 通过字符串设置文件过滤器
setNameFilters(Iterable[str]) # 通过迭代器设置文件过滤器
文件显示模式(显示信息的详细程度...Win10无效)
setViewMode(QFileDialog.ViewMode) # 设置文件显示模式(Win10无效)
# 参数:QFileDialog.ViewMode
# QFileDialog.Detail # 显示详细信息
# QFileDialog.List # 显示列表
# 经测试, win10下不太灵光
viewMode() -> QFileDialog.ViewMode # 获文件显示模式
设置指定角色的标签名称
setLabelText(self, QFileDialog.DialogLabel, str)
# 参数:QFileDialog.DialogLabel
# QFileDialog.FileName # 文件名标签
# QFileDialog.Accept # 确定按钮
# QFileDialog.Reject # 取消按钮
# QFileDialog.FileType # 文件类型
# QFileDialog.LookIn #
currentChanged(path_str) # 当前路径发生改变时,传递选中文件全路径的str对象
currentUrlChanged(QUrl) # 当前路径url发生改变时,传递选中文件全路径的QUrl对象
directoryEntered(directory_str) # 选中文件夹发生改变时,传递文件夹全路径的str对象
directoryUrlEntered(QUrl directory) # 选中文件夹发生改变时,传递文件夹全路径的QUrl对象
filterSelected(filter_str) # 选择名称过滤器时,传递所选择的过滤器名
fileSelected(str) # 最终确定选择文件时,传递一个str路径
urlSelected(QUrl url) # 最终确定选择文件时,传递一个QUrl对象
filesSelected([str]) # 最终确定选择多个文件时,传递包含多个str路径的列表
urlsSelected(List[QUrl]) # 最终确定选择多个文件时,传递包含多个QUrl对象的列表
from PyQt5.Qt import *
import sys
class Open_File(QWidget):
def __init__(self,parent,*args,**kwargs):
super().__init__(parent)
self.resize(500, 40)
self.btn = QPushButton(self)
self.btn.resize(120, 30)
self.btn.move(self.width() - 5 - self.btn.width(), 10)
self.led = QLineEdit(self)
self.led.move(10, 10)
self.led.resize(self.width() - 3 * 5 - self.btn.width(), 30)
def single_file(self,*args,**kwargs):
btn_text = args[0]
self.btn.setText(btn_text)
def select_file():
caption = args[1]
directory = args[2]
filter = args[3]
initialFilter = args[4]
file = QFileDialog.getOpenFileName(self, caption, directory, filter, initialFilter)
self.led.setText(file[0])
self.btn.clicked.connect(select_file)
def multiple_files(self, *args, **kwargs):
btn_text = args[0]
self.btn.setText(btn_text)
def select_file():
caption = args[1]
directory = args[2]
filter = args[3]
initialFilter = args[4]
file = QFileDialog.getOpenFileNames(self, caption, directory, filter, initialFilter)
fn = ','.join(file[0])
self.led.setText(fn)
self.btn.clicked.connect(select_file)
def save_files(self, *args, **kwargs):
btn_text = args[0]
self.btn.setText(btn_text)
def select_file():
caption = args[1]
directory = args[2]
filter = args[3]
initialFilter = args[4]
file = QFileDialog.getSaveFileName(self, caption, directory, filter, initialFilter)
self.led.setText(file[0])
self.btn.clicked.connect(select_file)
def open_direct(self, *args, **kwargs):
btn_text = args[0]
self.btn.setText(btn_text)
def select_file():
caption = args[1]
directory = args[2]
file = QFileDialog.getExistingDirectory(self, caption, directory)
self.led.setText(file)
self.btn.clicked.connect(select_file)
class Windows(QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle('QFileDialog-静态方法')
self.resize(500, 500)
self.widget_list()
def widget_list(self):
self.add_widget()
def add_widget(self):
caption = '请选择一个文件'
directory = './'
filter = '所有文件(*.*);;Word文件(*.doc *.docx);;Excel文件(*.xls *.xlsx);;Python文件(*.py)'
initialFilter = 'Python文件(*.py)'
w0 = Open_File(self)
w0.single_file('单文件浏览...',caption,directory,filter,initialFilter)
w1 = Open_File(self)
w1.multiple_files('多文件浏览...',caption,directory,filter,initialFilter)
w1.move(0, 50)
w2 = Open_File(self)
w2.save_files('单文件保存...', caption, directory, filter, initialFilter)
w2.move(0, 100)
w3 = Open_File(self)
w3.open_direct('选择文件夹', caption, directory)
w3.move(0, 200)
if __name__ == '__main__':
app = QApplication(sys.argv)
window = Windows()
window.show()
sys.exit(app.exec_())
from PyQt5.Qt import *
import sys
class Windows(QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle('QFileDialog-功能作用')
self.resize(500, 500)
self.widget_list()
def widget_list(self):
self.add_widget()
def add_widget(self):
# ****************构造方法****************** 开始
# 方法一
filed1 = QFileDialog(self)
# 方法二
filed = QFileDialog(self,'选择一个文件','./','所有文件(*.*);;Python文件(*.py);;Images(*.jpg *.png *.gif *.bmp)')
# ****************构造方法****************** 结束
pass
# ****************相关设置****************** 开始
# 设置接收模式
# filed.setAcceptMode(QFileDialog.AcceptOpen) # 打开模式
filed.setAcceptMode(QFileDialog.AcceptSave) # 保存模式
# 设置默认保存后缀
filed.setDefaultSuffix('.txt')
# 设置文件模式
filed.setFileMode(QFileDialog.ExistingFiles)
# 参数:QFileDialog.FileMode
# QFileDialog.AnyFile # 选择单个文件对话框模式(不管文件是否存在,可以直接输入文件名打开不报错)
# QFileDialog.ExistingFile # 选择单个现有文件对话框模式(文件是不存在,直接输入文件名打开会报错)
# QFileDialog.ExistingFiles # 选择多个文件对话框模式
# QFileDialog.Directory # 选择文件夹对话框模式(显示文件名和文件夹名)
# # Windows文件对话框不支持在目录选择器中显示文件。
# 通过文本设置文件过滤器
# filed.setNameFilter('所有文件(*.*);;Python文件(*.py);;Images(*.jpg *.png *.gif *.bmp)')
# 通过迭代器设置文件过滤器
ls = ['所有文件(*.*)','Python文件(*.py)','Images(*.jpg *.png *.gif *.bmp)']
filed.setNameFilters(ls)
# 设置文件显示模式(Win10无效)
filed.setViewMode(QFileDialog.Detail)
# 参数:QFileDialog.ViewMode
# QFileDialog.Detail # 显示详细信息
# QFileDialog.List # 显示列表
# 设置指定角色的标签名称
filed.setLabelText(QFileDialog.FileName, '疯子的文件名')
filed.setLabelText(QFileDialog.Accept, '疯子的确定')
filed.setLabelText(QFileDialog.Reject, '疯子的取消')
filed.setLabelText(QFileDialog.FileType, '疯子的文件类型')
filed.setLabelText(QFileDialog.LookIn, '疯子的LookIn')
# 参数:QFileDialog.DialogLabel
# QFileDialog.FileName # 文件名标签
# QFileDialog.Accept # 确定按钮
# QFileDialog.Reject # 取消按钮
# QFileDialog.FileType # 文件类型
# QFileDialog.LookIn #
# *****************相关设置***************** 结束
pass
# ****************打开对话框****************** 开始
filed.open()
# filed2.open()
# ****************打开对话框****************** 结束
if __name__ == '__main__':
app = QApplication(sys.argv)
window = Windows()
window.show()
sys.exit(app.exec_())
from PyQt5.Qt import *
import sys
class Window(QWidget):
def __init__(self):
super(Window, self).__init__()
self.setWindowTitle('QFileDialog-可用信号')
self.resize(500, 300)
self.method_list()
def method_list(self):
self.add_child()
def add_child(self):
self.filed = QFileDialog(self)
self.btn = QPushButton('浏览', self)
self.led = QLineEdit(self)
x = 3
y = 3
w = 100
h = 25
self.btn.resize(w, h)
self.btn.move(x, y)
self.led.resize(self.width() - 3 * x - self.btn.width(), self.btn.height())
self.led.move(self.btn.x()+self.btn.width()+x, self.btn.y())
filter_ls = ['所有文件(*.*)','Python文件(*.py)','文本文件(*.txt)','Excel文件(*.xls *.xlsx)','PDF文件(*.pdf)','Word文件(*.doc *.docx)']
self.filed.setNameFilters(filter_ls)
self.filed.setFileMode(QFileDialog.ExistingFiles)
self.btn.clicked.connect(self.select_file)
# self.filed.open()
def select_file(self):
# 当前路径发生改变时,传递选中文件全路径的str对象
self.filed.currentChanged.connect(self.xinhao_cao)
# 当前路径url发生改变时,传递选中文件全路径的QUrl对象
self.filed.currentUrlChanged.connect(self.xinhao_cao)
# 选中文件夹发生改变时,传递文件夹全路径的str对象
self.filed.directoryEntered.connect(self.xinhao_cao)
# 选中文件夹发生改变时,传递文件夹全路径的QUrl对象
self.filed.directoryUrlEntered.connect(self.xinhao_cao)
# 选择名称过滤器时,传递所选择的过滤器名
self.filed.filterSelected.connect(self.xinhao_cao)
# 最终确定选择文件时,传递一个str路径
self.filed.fileSelected.connect(self.xinhao_cao)
# 最终确定选择文件时,传递一个QUrl对象
self.filed.urlSelected.connect(self.xinhao_cao)
# 最终确定选择多个文件时,传递包含多个str路径的列表
self.filed.filesSelected.connect(self.xinhao_cao)
# 最终确定选择多个文件时,传递包含多个QUrl对象的列表
self.filed.urlsSelected.connect(self.xinhao_cao)
self.filed.open()
def xinhao_cao(self,val):
print(val)
if __name__ == '__main__':
app = QApplication(sys.argv)
window = Window()
window.show()
sys.exit(app.exec_())