今天学习的是文件对话框——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. HDU6623 思维题(n分解成质因子的形式,问最小的幂是多少)

    题目大意:给你一个数n,把它分解为素数的幂次的乘积的形式:n=p1^e1 * p2^e2 * .......pk^ek  求最小的幂次是多少 n=le18 分析: 首先我们肯定是不可以枚举1e18的因 ...

  2. 一、基础篇--1.1Java基础-int 和 Integer 有什么区别,Integer的值缓存范围

    int和Integer的区别 int是基本数据类型,Integer是int的包装类. Integer必须实例化后才能使用,int变量不需要. Integer实际是对象的引用,生成一个新对象实际上是生成 ...

  3. linux命令--truncate 学习

    truncate命令可以将一个文件缩小或者扩展到某个给定的大小 可以利用该命令和-s选项来特别指定文件的大小 1.清空一个文件内容,尤其是log 2. truncate -s 0 test

  4. 为什么在vmware中不能使用ctrl+alt+F1~6切换到字符控制台

    为什么在vmware中不能使用ctrl+alt+F1~6切换到字符控制台 是因为vmware虚拟机的快捷键: ctrl+alt也用到了 因为vmware本身的hot keys也用到了ctrl+alt: ...

  5. windows下 文件资源管理器 的操作

    alt + d 可以直接把光标移动到地址栏 shift + f10 可以触发右键, 后面就可以用键盘操作右键中的内容了 ( 如打开vscode alt + 空格 可以弹出窗口的菜单栏 ( 控制最大化 ...

  6. 【MM系列】SAP 物料凭证增强

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[MM系列]在SAP里查看数据的方法   前言部 ...

  7. junper防火墙之自摆乌龙

    Juniper防火墙划分三个端口: 1.E0/0连接内网网络,网段是172.16.1.0/24,E0/0的端口ip地址是172.16.1.1,作为内网网络的网关 2.E0/1连接DMZ区域,网段是17 ...

  8. 【Linux开发】【Qt开发】tslibs的配置(触摸屏没有,HDMI屏幕):Qt界面响应USB鼠标

    s3c2416   linux qt4.x 由于触摸屏坏了,板子只能用鼠标了,结果以前可以用的现在鼠标突然不能用了 为此交叉编译了qt的多个版本,也换过根文件系统,以为是tslib版本的问题,却发现q ...

  9. DB.JDBC_jar_下载

    1.Download Microsoft JDBC Driver for SQL Server - SQL Server _ Microsoft Docs.html(https://docs.micr ...

  10. k8s/01开启云原生之门(Mooc)

    一.kubernetes(k8s)基础知识 1.简介 在2017年Kubernetes战胜了两个强大的竞争对手Swarm和Mesos,成为容器管理与调度编排领域的首选平台和事实标准. 2014年k8s ...