GUI学习之二十九—QFileDialog学习总结

摘要:
我今天学到的是文件对话框-QFileDialog 1说明QFileDialog提供了一个对话框,允许用户选择文件或目录,还允许用户遍历文件系统以选择一个或多个文件或目录。QFileDialog继承QDialog并具有父类的各种方法。最后,运行的结果打印出一个元组。我们可以按要求操作。当使用选择多个文件getOpenFileNames()的方法时,返回的元组的第一个元素是列表,列表中的内容是所选文件。3.接收模式分为两种模式:打开模式和保存模式。默认设置是打开文件。

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

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

                                                                        GUI学习之二十九—QFileDialog学习总结第1张

  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,我们可以直接拿来使用。

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

                                                                                                                                            GUI学习之二十九—QFileDialog学习总结第2张

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

  获取文件夹

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学习总结》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇macbookpro2013升级1T的ssdOracle 11g安装过程下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Qt QApplication::processEvents();//不停地处理事件,让程序保持响应

QCoreApplication、QGuiApplication、QApplication区别和联系: 继承关系: QApplication <- QGuiApplication <- QCoreApplication <- QObject 所处的Qt模块: QCoreApplication定义在core模块中,为应用程序提供了一个非gu...

GUI线程安全详解(一)

作为一名TWaver Evangelist,我的工作目的就是通过与客户的交流、培训甚至现场支持等方式帮助用户将TWaver更好地应用到客户项目中,TWaver是这么一款横跨Java、Web、Flex和.NET等多种技术平台的GUI图形组件,因此我的工作内容简单的说就是:帮助客户正确使用GUI。 提到GUI线程安全,这是我最想谈也最不想谈的话题,想谈因为此问...

JavaScript-基础知识

一、JavaScript-简介Web前端有三层: HTML:从语义的角度,描述页面结构 CSS:从审美的角度,描述样式(美化页面) JavaScript:从交互的角度,描述行为(提升用户体验) JavaScript历史背景介绍 布兰登 • 艾奇(Brendan Eich,1961年~),1995年在网景公司,发明的JavaScript。 开始JavaS...

ALV常用参数的详细描述

调用功能模块: CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY' EXPORTING i_interface_check = '' 接口一致性检查 i_callback_program = sy-r...

从 C++ 到 Qt(命令行编译)good

从 C++ 到 Qt 转载自:http://hi.baidu.com/cyclone/blog/item/8f8f08fa52d22f8758ee9006.html Qt 是 C++ 的库,Qt在ansi C++ 的基础上进行了一点扩展。 但国内似乎比较浮躁,学Qt的很多连基本的C++如何编译似乎都不太清楚。本文舍弃IDE或qmake、cmake等工具的...

【python系统学习10】布尔值

python的数据类型有好多个,前边写过字符串、整数和浮点数这三种。 本节来整理另一种简单数据类型--布尔值 布尔值(bool) 布尔值和其数据值 计算机可以用数据进行判断,若判断为真则执行特定条件中的代码块。若不为真则执行相反的指定条件内的代码块或不执行任何内容。 这种数据就是布尔值。其数据类型在python中标记为bool。 布尔值其值比较特殊,不像字...