PyQt5_QFileDialog_文件对话框

**PyQt5_QFileDialog_文件对话框,
1,使用静态方法,快捷获取文件路径
2, 构造函数
3,文件模式设置
4,字符串过滤器
5,信号相关
**

#
# QFileDialog
#           文件选择对话框
#                       允许用户选择文件,
#                       遍历文件系统,以选择一个或者多个文件目录

from PyQt5.Qt import *

class MyWindow(QWidget):
    def __init__(self):
        super().__init__()
        self.setWindowTitle('QFileDialog_文件选择')
        self.resize(500,500)
        self.fd = QFileDialog(self,'葵花宝典','../','所有文件(*.*);;Python文件(*.py);;图片(*.png *.jpg)')
        self.fd.show()
        self.iniUI()


    def iniUI(self):
        # self.getOpenFileName_()
        # self.getOpenFileNames_()
        # self.getOpenFileUrl_()
        # self.getOpenFileUrls_()
        # self.getSaveFileName_()
        # self.getSaveFileUrl_()
        # self.getExistingDirectory_()
        # self.getExistingDirectoryUrl_()
        # self.constructFunc()
        # self.setAcceptMode_()
        # self.setFileMode_()
        # self.setNameFilter_()
        self.fileDialogEvent()

    ##############################################使用静态方法,快捷获取文件路径
    #
    # 现在需求:
    #           使用静态方法,快捷获取文件路径
    #          ( 父控件 , '对话框标题', '文件路径' , ' 过滤器名称1(*.后缀名1 *.后缀名2 g);;过滤器名称2(*.后缀名1 *.后缀名2 ) ')
    # 解决方法: 
    #           QFileDialog.getOpenFileName()
    #           QFileDialog.getOpenFileNames()
    #           QFileDialog.getOpenFileUrl()
    #           QFileDialog.getOpenFileUrls()
    #           QFileDialog.getSaveFileName()
    #           QFileDialog.getSaveFileUrl()
    #           QFileDialog.getExistingDirectory()
    #           QFileDialog.getExistingDirectoryUrl()
    def getOpenFileName_(self):
        result1 = QFileDialog.getOpenFileName(self, '葵花宝典', './', '所有文件(*.*);;Python文件(*.py);;图片(*.png *.jpg)')
        # result1 是一个元组,元组元素均为字符串,
        # 第一个元素是 所打开的文件 绝对路径,
        # 第二个元素是 所选择的过滤器字符串
        print(result1)

    def getOpenFileNames_(self):
        result2 = QFileDialog.getOpenFileNames(self, '葵花宝典', './', '所有文件(*.*);;Python文件(*.py);;图片(*.png *.jpg)')
        # result2 是一个元组,元组元素均为字符串,
        # 第一个元素是 所打开的多个文件 绝对路径 组成的列表,列表每个元素均为文件绝对路径字符串,
        # 第二个元素是 所选择的过滤器字符串
        print(result2)

    def getOpenFileUrl_(self):
        result3 = QFileDialog.getOpenFileUrl(self, '葵花宝典', './', '所有文件(*.*);;Python文件(*.py);;图片(*.png *.jpg)')
        print(result3)  # 第一个元素 是一个包含文件绝对路径字符串的 QUrl对象,不是字符串类型了

    def getOpenFileUrls_(self):
        result4 = QFileDialog.getOpenFileUrls(self, '葵花宝典', './', '所有文件(*.*);;Python文件(*.py);;图片(*.png *.jpg)')
        print(result4)

    def getSaveFileName_(self):
        result5 = QFileDialog.getSaveFileName(self, '葵花宝典', './', '所有文件(*.*);;Python文件(*.py);;图片(*.png *.jpg)')
        print(result5)

    def getSaveFileUrl_(self):
        result6 = QFileDialog.getSaveFileUrl(self, '葵花宝典', './', '所有文件(*.*);;Python文件(*.py);;图片(*.png *.jpg)')
        print(result6)

    def getExistingDirectory_(self):
        result7 = QFileDialog.getExistingDirectory(self, '葵花宝典', './')  # 不需要过滤器

        print(type(result7), result7)  ## result7 只是一个文件夹的绝对路径,!!!不带引号的纯字符串

    def getExistingDirectoryUrl_(self):
        result8 = QFileDialog.getExistingDirectoryUrl(self, '葵花宝典', QUrl('./'))  # 不需要过滤器
        print(result8)  # PyQt5.QtCore.QUrl('file:///E:/Python/code/GUI')  返回一个QUrl()对象

    ##############################################################################使用静态方法,快捷获取文件路径


    ##############################################文件对话框 构造函数
    #
    #
    #
    def constructFunc(self):
        self.fd.fileSelected.connect(lambda str_:print('选择了文件:',str_))#文件对话框文件被选择时发射的信号
    #############################文件对话框 构造函数

    ##############################################文件对话框 打开或者保存 接受模式设置
    #
    #设置
    #
    def setAcceptMode_(self):
        # self.fd.setAcceptMode(QFileDialog.AcceptOpen)
        self.fd.setAcceptMode(QFileDialog.AcceptSave)
        self.fd.fileSelected.connect(lambda str_:print('选择了文件:',str_))
        self.fd.setDefaultSuffix('txt')#设置默认的后缀名
    #############################文件对话框 打开或者保存 接受模式设置


    ##############################################文件对话框 文件模式设置 类似于文件过滤
    #
    # 类似于文件过滤,
    #           设置文件是 单选模式 或者 多选模式
    #
    #
    #
    def setFileMode_(self):
        # self.fd.setFileMode(QFileDialog.ExistingFile) #单个现有文件
        # self.fd.setFileMode(QFileDialog.ExistingFiles) #可以多选文件,多个现有文件
        # self.fd.setFileMode(QFileDialog.Directory)    #只能选择目录
        self.fd.setFileMode(QFileDialog.AnyFile)        #任何文件,无论是否存在

        self.fd.fileSelected.connect(lambda str_:print('选择了文件:',str_))
    #############################文件对话框 文件模式设置 类似于文件过滤


    ##############################################文件对话框文件名称 字符串过滤器
    #
    # 针对文件名称 进行过滤
    #
    def setNameFilter_(self):
        self.fd.setNameFilters( ['所有文件(*.*)','图片(*.png *.jpg)','Python文件(*.py)'] )
    #############################文件对话框 文件名称 字符串过滤器

    ##############################################文件对话框 信号相关
    #
    # 现在需求:
    #           文件对话框 信号相关
    #
    # 解决方法:
    #           fd.currentChanged.connect( lambda path_str:)
    #           fd.currentUrlChanged.connect(lambda QUrl():)
    #           fd.directoryEntered.connect(lambda directory_str:)
    #           fd.filterSelected.connect(lambda filter_str:)
    #           fd.fileSelected.connect(lambda file_path_str:)
    #           fd.filesSelected.connect(lambda [file_path_str]:)
    #
    #
    def fileDialogEvent(self):
        ### 返回 点击到的任意文件或文件夹 的绝对路径 (真的只是点击到,不需要双击进入的)
        # self.fd.currentChanged.connect(lambda path_str:print(path_str))

        ### 当鼠标双击进入某个文件夹时,返回 文件夹的完整路径
        self.fd.directoryEntered.connect(lambda directory_str:print('进入文件夹',directory_str))

        ### 当鼠标选择不同的文件过滤器时,返回所选择的过滤器名称
        self.fd.filterSelected.connect(lambda filter_str:print('过滤器',filter_str))

        ###当选中的单个文件时,多文件被选中 filesSelected的信号也会被发射
        ###但是选中多个文件时,只有多文件被选中,filesSelected的信号会被发射
        self.fd.setFileMode(QFileDialog.ExistingFiles)#设置为可多选模式
        self.fd.fileSelected.connect(lambda file_path_str:print('单个文件被选中',file_path_str))
        self.fd.filesSelected.connect(lambda Iter:print('多个文件被选中',Iter))
    #############################文件对话框 信号相关


if __name__ == '__main__':
    import sys
    app = QApplication(sys.argv)
    win = MyWindow()
    win.show()
    sys.exit(app.exec_())

小白学习笔记,若感兴趣留个爪 hahaha ^. ^

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值