zoukankan      html  css  js  c++  java
  • 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.当前发生变化是只要鼠标点中文件或文件夹就触发,而进入目录是必须进入到文件夹里才触发。

      

  • 相关阅读:
    Maven+SpringMVC+Dubbo 简单的入门demo配置
    记录Gerrit2.8.4环境迁移、安装、配置以及问题解决
    初试Jenkins2.0 Pipeline持续集成
    Docker镜像仓库Harbor之搭建及配置
    Docker镜像仓库Harbor之Swagger REST API整合配置
    GitLab 之 PlantUML 的配置及使用
    Git Review + Gerrit 安装及使用完成 Code-Review
    Maven 插件之 docker-maven-plugin 的使用
    SonarQube 的安装、配置及 Maven 项目的使用
    Java Maven项目之Nexus私服搭建和版本管理应用
  • 原文地址:https://www.cnblogs.com/yinsedeyinse/p/11531105.html
Copyright © 2011-2022 走看看