GUI学习之二十九—QFileDialog学习总结
今天学习的是文件对话框——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学习总结的更多相关文章
- GUI学习之二十九—QInputDialog学习总结
最后一种对话框是QInputDialog,,用来提供个输入的窗口. 一常用的静态方法 由于输入的类型不同,QInputDialog分为多种静态方法使用 #有步长调节器的整形数据,step为步长调节器的 ...
- 深度学习(二十九)Batch Normalization 学习笔记
Batch Normalization 学习笔记 原文地址:http://blog.csdn.net/hjimce/article/details/50866313 作者:hjimce 一.背景意义 ...
- Java学习笔记二十九:一个Java面向对象的小练习
一个Java面向对象的小练习 一:项目需求与解决思路: 学习了这么长时间的面向对象,我们只是对面向对象有了一个简单的认识,我们现在来做一个小练习,这个例子可以使大家更好的掌握面向对象的特性: 1.人类 ...
- GUI学习之二十五——QFontDialog学习总结
今天学习字体对话框——QFontDialog()控件. QFontDialog()是继承自QDialog()的一个子类,用来选择给定的字体(包括字体.字号.样式等) 一.构造函数 QFontDialo ...
- GUI学习之二十四——QDialog学习总结
今天学习对话框输入控件的基类(QDialog). 一.描述 是对话类窗口(字体框.颜色选择.文件选择框等)的基类. 对话框窗口是顶级窗口(就是说不包含于哪个父类的显示界面里),主要用于短期任务和与用户 ...
- java web学习总结(二十九) -------------------JavaBean的两种开发模式
SUN公司推出JSP技术后,同时也推荐了两种web应用程序的开发模式,一种是JSP+JavaBean模式,一种是Servlet+JSP+JavaBean模式. 一.JSP+JavaBean开发模式 1 ...
- angular学习笔记(二十九)-$q服务
angular中的$q是用来处理异步的(主要当然是http交互啦~). $q采用的是promise式的异步编程.什么是promise异步编程呢? 异步编程最重要的核心就是回调,因为有回调函数,所以才构 ...
- salesforce 零基础学习(二十九)Record Types简单介绍
在项目中我们可能会遇见这种情况,不同的Profile拥有不同的页面,页面中的PickList标签可能显示不同的值.这个时候,使用Record Types可以很便捷的搞定需求. Record Types ...
- JavaWeb学习(二十九)———— 事务
一.事务的概念 事务指逻辑上的一组操作,组成这组操作的各个单元,要不全部成功,要不全部不成功. 例如:A——B转帐,对应于如下两条sql语句 update from account set mone ...
随机推荐
- sock( ) bind( ) connect( )
Linux下的socket()函数 调用头文件<sys/socket.h>中的socket函数 int socket(int af, int type, int protocol); 1) ...
- 从三十而立的迷茫,到30K
很标题党的标题,但是希望分享一下自己的经历,一份有点儿不寻常的经历. 12年创业,到17年末,举步维艰,没有项目,公司只剩下两个人,负债,现实给我这个每见过什么市面,却自命不凡的人狠狠的一个耳光.加上 ...
- nginx回源使用localhost产生问题
最近测试ngx_http_slice模块,回源的时候填的localhost结果老是超时,还以为是slice模块有问题,后来无意间改成127.0.0.1后就没有问题了 真是见鬼了 #user root; ...
- Java synchronized到底锁住的是什么?
使用环境:多线程java程序中. 作用:在多线程的环境下,控制synchronized代码段不被多个线程同时执行.synchronized既可以加在一段代码上,也可以加在方法上. 使用:synchro ...
- 淘淘相关工具类【json,httpClient,id,FTP,exception,cookie(包括共享cookie的设置等)】
json package com.taotao.common.utils; import java.util.List; import com.fasterxml.jackson.core.JsonP ...
- 二:flask-debug模式详解
debug模式的情况下可以抛出详细异常信息 新建一个脚本并运行 访问 此时是非debug模式,如果运行的时候代码报错了,是不会提示详细错误的,只会报服务器内部错误 开启debug模式,可以查看到详细错 ...
- Spring中通过变量和import标签来控制加载哪些bean
需求:根据设置变量,来加载某个spring的bean的配置文件,这个配置文件中,有某些使用的bean.在一些情况下,不希望这些bean被初始化和加载进context中,也不需要被外面访问到. 在spr ...
- Selenium学习之==>WebDriverApi接口详解
浏览器操作 driver.back() # 后退 driver.forward() # 前进 driver.refresh() # 刷新 窗口操作 driver.get_window_size() # ...
- 应用安全 - 工具 - freefloatftpserver - 漏洞汇总
Freefloat FTP Server 1.0 Date 类型栈溢出导致远程代码执行 复现(1)启动服务 (2)FTP连接(账号密码任意) 分析(1)正常运行调试 (1)pwntools发送expl ...
- CAS单点登录系统入门--分布式登录验证
1.开源单点登录系统CAS入门 1.1 什么是单点登录 单点登录(Single Sign On),简称为 SSO,是目前比较流行的企业业务整合的解决方案之一.SSO的定义是在多个应用系统中,用户只需要 ...