今天学习的是文件对话框——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. sock( ) bind( ) connect( )

    Linux下的socket()函数 调用头文件<sys/socket.h>中的socket函数 int socket(int af, int type, int protocol); 1) ...

  2. 从三十而立的迷茫,到30K

    很标题党的标题,但是希望分享一下自己的经历,一份有点儿不寻常的经历. 12年创业,到17年末,举步维艰,没有项目,公司只剩下两个人,负债,现实给我这个每见过什么市面,却自命不凡的人狠狠的一个耳光.加上 ...

  3. nginx回源使用localhost产生问题

    最近测试ngx_http_slice模块,回源的时候填的localhost结果老是超时,还以为是slice模块有问题,后来无意间改成127.0.0.1后就没有问题了 真是见鬼了 #user root; ...

  4. Java synchronized到底锁住的是什么?

    使用环境:多线程java程序中. 作用:在多线程的环境下,控制synchronized代码段不被多个线程同时执行.synchronized既可以加在一段代码上,也可以加在方法上. 使用:synchro ...

  5. 淘淘相关工具类【json,httpClient,id,FTP,exception,cookie(包括共享cookie的设置等)】

    json package com.taotao.common.utils; import java.util.List; import com.fasterxml.jackson.core.JsonP ...

  6. 二:flask-debug模式详解

    debug模式的情况下可以抛出详细异常信息 新建一个脚本并运行 访问 此时是非debug模式,如果运行的时候代码报错了,是不会提示详细错误的,只会报服务器内部错误 开启debug模式,可以查看到详细错 ...

  7. Spring中通过变量和import标签来控制加载哪些bean

    需求:根据设置变量,来加载某个spring的bean的配置文件,这个配置文件中,有某些使用的bean.在一些情况下,不希望这些bean被初始化和加载进context中,也不需要被外面访问到. 在spr ...

  8. Selenium学习之==>WebDriverApi接口详解

    浏览器操作 driver.back() # 后退 driver.forward() # 前进 driver.refresh() # 刷新 窗口操作 driver.get_window_size() # ...

  9. 应用安全 - 工具 - freefloatftpserver - 漏洞汇总

    Freefloat FTP Server 1.0 Date 类型栈溢出导致远程代码执行 复现(1)启动服务 (2)FTP连接(账号密码任意) 分析(1)正常运行调试 (1)pwntools发送expl ...

  10. CAS单点登录系统入门--分布式登录验证

    1.开源单点登录系统CAS入门 1.1 什么是单点登录 单点登录(Single Sign On),简称为 SSO,是目前比较流行的企业业务整合的解决方案之一.SSO的定义是在多个应用系统中,用户只需要 ...