今天学习的是文件对话框——QFileDialog

一.描述

  QFileDialog提供了一个对话框,允许用户选择文件或者目录,也允许用户遍历文件系统,用以选择一个或多个文件或者目录。

  QFileDialog继承了QDialog,具有父类的各种方法。

二.功能作用

  1.最简单的获取方法(静态方法)

  获取文件

QFileDialog.getOpenFileName()    #获取一个打开文件的文件名
QFileDialog.getOpenFileNames() #获取多个打开文件的文件名
QFileDialog.getOpenFileUrl() #获取一个打开文件的统一资源定位符
QFileDialog.getOpenFileUrls() #获取多个打开文件的统一资源定位符
QFileDialog.getSaveFileName() #获取保存的文件名
QFileDialog.getSaveFileUrl() #获取保存的url

  这些代码使用的方法基本一样,我们来演示一下

fd = QFileDialog.getOpenFileName(self,'选择一个py文件','./','ALL(*.*);;Images(*.png *.jpg);;Python文件(*.py)','Python文件(*.py)')
print(fd)

  下面介绍一下每个参数的意义:

  self就不用说了,第一个‘选择一个py文件’是对话框的标题

  './'是打开对话框的默认地址

  'ALL(*.*);;Images(*.png *.jpg);;Python文件(*.py)'是过滤字符串,定义了打开按钮上面的下拉框里的内容(文件类型),注意不同的文件类型之间是用两个分号隔开的。

  'Python文件(*.py)'最后这个参数是初始的过滤值,就是对话框弹出时过滤出的文件类型。

  最后运行的结果打印出了一个元组

('D:/python/PyQt_GUI/QFileDialog/1.py', 'Python文件(*.py)')

  我们可以根据需求进行操作(元组的第2个元素是选择时候的过滤字符串)

  用选择多个文件getOpenFileNames()的方法时,返回的元组的第一个元素是个列表,列表里的内容就是选择的文件。url地址的用法是一样的。但返回的元组的第一个元素是个PyQt5.QtCore.QUrl,我们可以直接拿来使用。

  获取保存的文件名里的参数和获取打开文件名是一样的,不过弹框的效果不太一样

原先的过滤字符串编程了保存类型。但返回的值还是一样的。

  获取文件夹

QFileDialog.getExistingDirectory()
QFileDialog.getExistingDirectoryUrl()

  获取文件夹的参数比较简单,只需给定路径就可以(标题是可有可无的!)并且返回值直接就是个字符串(文件夹的路径)

  但是获取文件夹Url的方法就有些区别,路径不能是一个简单的申明路径的字符串,而必须是个QUrl,并且标题也是必须要有的,返回值也是个QUrl对象。

fd = QFileDialog.getExistingDirectoryUrl(self,'选择一个文件夹',QUrl('./.'))

  最后不从一下过滤字符串的格式

名称1(*.jpg *.png);;名称2(*.py)

  比如名称1有两种以上格式的文件(jpg,png)就可以直接列出来以后用空格来分割,而名称1和名称2之间是需要两个分号来分割。

  2.构造函数

  大部分的场景用上面的静态方法都够用了,这里我们可以通过构造函数来使用。

from PyQt5.Qt import *
import sys class Window(QWidget):
def __init__(self):
super().__init__()
self.UI_test() def UI_test(self):
btn = QPushButton('test',self)
btn.clicked.connect(self.fun) def fun(self):
fd = QFileDialog(self,'选择文件','../')
fd.open()
print('test') #运行代码可以通过这行代码发现对话框是个非阻塞的,如果想获得选择的文件就需要借助下面的信号
fd.fileSelected.connect(lambda file:print(file)) pass
if __name__ == '__main__':
app = QApplication(sys.argv)
window = Window()
window.show()
sys.exit(app.exec_())

  这里只讲了最基础的用法,后面可以结合一些方法来表现出不同的效果。

  3.接收模式

  因为QFileDialog分为打开和保存两种模式,默认情况是打开文件的。但是我们也可以通过下面的代码把他设置成为保存模式的。

QFileDialog.setAcceptMode(self, mode: 'QFileDialog.AcceptMode')
AcceptOpen = ... # type: 'QFileDialog.AcceptMode'
AcceptSave = ... # type: 'QFileDialog.AcceptMode'

  4.默认后缀

  如果我们希望文件名称是带有默认后缀的,可以用下面的方法

QFileDialog.setDefaultSuffix(self, suffix: str)

  在显示效果里是文件名后是没有后缀的,但是返回的参数就加上了后缀名。

  5.设置文件模式(文件/文件夹)

  通过下面的方法可以设置要操作的对象是文件还是文件夹

QFileDialog.setFileMode(self, mode: 'QFileDialog.FileMode')
#QFileDialog.FileMode中FileMode枚举值
# AnyFile 任意文件,无论是否存在
# ExistingFile 已存在的文件
# Directory 文件夹
# ExistingFiles 0个或多个现有文件
# DirectoryOnly 只能为目录

  6.设置名称过滤器

QFileDialog.setNameFilters(self, filters: typing.Iterable[str])
QFileDialog.setNameFilter(self, filter: str)

  注意如果是多个过滤器是迭代器的用法,用列表或元组就可以了,就可以不用前面说的用两个分号来分割。还有如果如果在构造函数里定义了过滤器,这里也设置了,那么是按这个过滤器来设置的。

  7.信息显示的详细程度

QFileDialog.setViewMode(self, mode: 'QFileDialog.ViewMode')
Detail = ... # type: 'QFileDialog.ViewMode'
List = ... # type: 'QFileDialog.ViewMode'

  但是这个设置在win10里是没有效果的,通过对话框里的显示图标就可以改了,可能后续的版本会改进吧。

  8.指定的角色标签名称

  我们可以对文件名、文件类型等标签的文本进行设置

QFileDialog.setLabelText(self, label: 'QFileDialog.DialogLabel', text: str)
# LookIn = ... # type: 'QFileDialog.DialogLabel'
# FileName = ... # type: 'QFileDialog.DialogLabel'
# FileType = ... # type: 'QFileDialog.DialogLabel'
# Accept = ... # type: 'QFileDialog.DialogLabel'
# Reject = ... # type: 'QFileDialog.DialogLabel'

  9.打开对话框

  打开对话框除了前面用的open()以外,还可以通过由返回值的exec()来使用(和父类QDialog的返回方法是一样的)

三。常用信号

QFileDialog.currentChanged(self, path: str)                     #当前发生变化(参数为路径字符串)
QFileDialog.currentUrlChanged(self, url: QtCore.QUrl) #当前发生变化(参数为Url)
QFileDialog.directoryEntered(self, directory: str) #进入目录(参数为路径字符串)
QFileDialog.directoryUrlEntered(self, directory: QtCore.QUrl) #进入目录(参数为Url)
QFileDialog.filterSelected(self, filter: str) #名称字符串过滤器变化(参数为过滤器对应字符串)
QFileDialog.fileSelected(self, file: str)
QFileDialog.filesSelected(self, files: typing.Iterable[str])
QFileDialog.urlSelected(self, url: QtCore.QUrl)
QFileDialog.urlsSelected(self, urls: typing.Iterable[QtCore.QUrl])

注意一下,1.当前发生变化是只要鼠标点中文件或文件夹就触发,而进入目录是必须进入到文件夹里才触发。

  

GUI学习之二十九—QFileDialog学习总结的更多相关文章

  1. GUI学习之二十九—QInputDialog学习总结

    最后一种对话框是QInputDialog,,用来提供个输入的窗口. 一常用的静态方法 由于输入的类型不同,QInputDialog分为多种静态方法使用 #有步长调节器的整形数据,step为步长调节器的 ...

  2. 深度学习(二十九)Batch Normalization 学习笔记

    Batch Normalization 学习笔记 原文地址:http://blog.csdn.net/hjimce/article/details/50866313 作者:hjimce 一.背景意义 ...

  3. Java学习笔记二十九:一个Java面向对象的小练习

    一个Java面向对象的小练习 一:项目需求与解决思路: 学习了这么长时间的面向对象,我们只是对面向对象有了一个简单的认识,我们现在来做一个小练习,这个例子可以使大家更好的掌握面向对象的特性: 1.人类 ...

  4. GUI学习之二十五——QFontDialog学习总结

    今天学习字体对话框——QFontDialog()控件. QFontDialog()是继承自QDialog()的一个子类,用来选择给定的字体(包括字体.字号.样式等) 一.构造函数 QFontDialo ...

  5. GUI学习之二十四——QDialog学习总结

    今天学习对话框输入控件的基类(QDialog). 一.描述 是对话类窗口(字体框.颜色选择.文件选择框等)的基类. 对话框窗口是顶级窗口(就是说不包含于哪个父类的显示界面里),主要用于短期任务和与用户 ...

  6. java web学习总结(二十九) -------------------JavaBean的两种开发模式

    SUN公司推出JSP技术后,同时也推荐了两种web应用程序的开发模式,一种是JSP+JavaBean模式,一种是Servlet+JSP+JavaBean模式. 一.JSP+JavaBean开发模式 1 ...

  7. angular学习笔记(二十九)-$q服务

    angular中的$q是用来处理异步的(主要当然是http交互啦~). $q采用的是promise式的异步编程.什么是promise异步编程呢? 异步编程最重要的核心就是回调,因为有回调函数,所以才构 ...

  8. salesforce 零基础学习(二十九)Record Types简单介绍

    在项目中我们可能会遇见这种情况,不同的Profile拥有不同的页面,页面中的PickList标签可能显示不同的值.这个时候,使用Record Types可以很便捷的搞定需求. Record Types ...

  9. JavaWeb学习(二十九)———— 事务

    一.事务的概念 事务指逻辑上的一组操作,组成这组操作的各个单元,要不全部成功,要不全部不成功. 例如:A——B转帐,对应于如下两条sql语句  update from account set mone ...

随机推荐

  1. legend3---Homestead中Laravel项目502 Bad Gateway

    legend3---Homestead中Laravel项目502 Bad Gateway 一.总结 一句话总结: 用查看错误日志的方法解决错误:(/var/log/nginx/.log) 1.home ...

  2. 关于spotlight_on_oracle的配置及操作

    Spotlight是一个强有力的Oracle数据库实时性能诊断工具,提供了一个直观的.可视化的数据库活动展现.Spotlight可视化展现性能瓶颈,一旦某个指标超出可接受的阀值的话.而且,通过下钻功能 ...

  3. OpenStack 实现技术分解 (6) 通用库 — oslo_log

    目录 目录 前文列表 扩展阅读 日志级别 oslolog 初始化设置 DEMO oslolog 的相关配置项 oslolog 的日志级别 oslolog 的使用技巧 推荐使用 LOGdebug 的地方 ...

  4. 将html转化为canvas图片(清晰度高)的方法

    var copyDom = document.querySelector('.fenxiang1'); var width = copyDom.offsetWidth;//dom宽 var heigh ...

  5. oracle-不完全数据库恢复-被动恢复-ORA-00313/ORA-00366

    继上一篇不完全恢复 oracle-不完全数据库恢复-被动恢复-ORA-00313/ORA-00366 场景2:数据库拥有备份,CURRENT状态日志组中所有的在线日志头损坏,在发生日志切换时实例被自动 ...

  6. 【SpringMVC】---搭建框架步骤

    项目如下 一.加入 Jar 包 部分jar包可以不导(第4.9.11个可以不导入) 二.在 Web.xml 中配置 DispatcherServlet <?xml version="1 ...

  7. 【ABAP系列】SAP Web Dynpro 技术简介

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[ABAP系列]SAP Web Dynpro 技 ...

  8. [LeetCode] 1090. Largest Values From Labels

    使用 Java 爬取 LeetCode 题目内容以及提交的AC代码 传送门 Description We have a set of items: the i-th item has value va ...

  9. 深入理解java:2.1. volatile的使用及其原理

    引言 在多线程并发编程中synchronized和Volatile都扮演着重要的角色,Volatile是轻量级的synchronized,它在多处理器开发中保证了共享变量的“可见性”. 可见性的意思是 ...

  10. C语言I-2019博客作业02

    这个作业属于哪个课程 C语言程序设计I 这个作业要求在哪里 C语言I-2019秋作业02 我在这个课程的目标是 学会编程及提问的技能 这个作业在哪个具体目标方面帮助我实现目标 深入了解C语言程序设计中 ...