062.PyQt5_QFileDialog_文件选择对话框

QFileDialog 文件选择对话框

  • 描述
    • 提供了一个对话框,允许用户选择文件或目录
    • 允许用户遍历文件系统,以选择一个或多个文件或目录
  • 继承自:QDialog
  • 功能作用
    • 静态方法(最简单的获取方式)

      • 获取文件
        # 单文件选择对话框
        
        # 打开单文件选择对话框,返回包含str类型文件全路径和文件过滤器选项的元组
        getOpenFileName(self, parent, caption, directory, filter, initialFilter, options, QFileDialog_Options, QFileDialog_Option, *args, **kwargs)
        # getOpenFileName(parent: QWidget = None, caption: str = '', directory: str = '', filter: str = '', initialFilter: str = '', options: Union[QFileDialog.Options, QFileDialog.Option] = 0) -> Tuple[str, str]
        
        # 打开单文件选择对话框,返回包含QUrl类型文件全路径和文件过滤器选项的元组
        getOpenFileUrl(self, parent, caption, directory, *args, **kwargs)
        # getOpenFileUrl(parent: QWidget = None, caption: str = '', directory: str = '', filter: str = '', initialFilter: str = '', options: Union[QFileDialog.Options, QFileDialog.Option] = 0, supportedSchemes: Iterable[str] = []) -> Tuple[QUrl, str]
        
        # 多文件选择对话框
        
        # 打开多文件选择对话框,返回包含所有str类型文件全路径的列表和文件过滤器选项的元组
        getOpenFileNames(self, parent, caption, directory, filter, initialFilter, options, QFileDialog_Options, QFileDialog_Option, *args, **kwargs)
        # getOpenFileNames(parent: QWidget = None, caption: str = '', directory: str = '', filter: str = '', initialFilter: str = '', options: Union[QFileDialog.Options, QFileDialog.Option] = 0) -> Tuple[List[str], str]
        
        # 打开多文件选择对话框,返回包含所有QUrl类型文件全路径的列表和文件过滤器选项的元组
        getOpenFileUrls(self, parent, caption, directory, *args, **kwargs)
        # getOpenFileUrls(parent: QWidget = None, caption: str = '', directory: str = '', filter: str = '', initialFilter: str = '', options: Union[QFileDialog.Options, QFileDialog.Option] = 0, supportedSchemes: Iterable[str] = []) -> Tuple[List[QUrl], str]
        
        # 文件保存对话框
        
        # 打开文件保存对话框,返回包含str类型的保存文件全路径和文件过滤器选项的元组
        getSaveFileName(self, parent, caption, directory, filter, initialFilter, options, QFileDialog_Options, QFileDialog_Option, *args, **kwargs)
        # getSaveFileName(parent: QWidget = None, caption: str = '', directory: str = '', filter: str = '', initialFilter: str = '', options: Union[QFileDialog.Options, QFileDialog.Option] = 0) -> Tuple[str, str]
        
        # 打开文件保存对话框,返回包含QUrl类型的保存文件全路径和文件过滤器选项的元组
        getSaveFileUrl(self, parent, caption, directory, *args, **kwargs)
        # getSaveFileUrl(parent: QWidget = None, caption: str = '', directory: str = '', filter: str = '', initialFilter: str = '', options: Union[QFileDialog.Options, QFileDialog.Option] = 0, supportedSchemes: Iterable[str] = []) -> Tuple[QUrl, str]
        
        
        # 参数说明
        #        parent:父对象
        #       caption:对话框标题
        #     directory:默认打开路径
        #        filter:文件类型过滤器
        # initialFilter:默认过滤文件类型
        #       options:选项控制
        
      • 获取文件夹
        # 文件夹选择对话框,返回str类型的所选择的文件夹路径
        getExistingDirectory(self, parent, caption, directory, options, QFileDialog_Options, QFileDialog_Option, *args, **kwargs)
        # getExistingDirectory(parent: QWidget = None, caption: str = '', directory: str = '', options: Union[QFileDialog.Options, QFileDialog.Option] = QFileDialog.ShowDirsOnly) -> str
        
        # 文件夹选择对话框,返回QUrl类型的所选择的文件夹路径
        getExistingDirectoryUrl(self, parent, caption, directory, *args, **kwargs)
        # getExistingDirectoryUrl(parent: QWidget = None, caption: str = '', directory: QUrl = QUrl(), options: Union[QFileDialog.Options, QFileDialog.Option] = QFileDialog.ShowDirsOnly, supportedSchemes: Iterable[str] = []) -> QUrl
        
        # 参数说明
        #      parent:父对象
        #     caption:对话框标题
        #   directory:默认打开路径
        #     options:选项控制
        
      • 补充
        • 过滤字符串格式:名称1(*.jpg *.png);;名称2(*.py)
    • 构造函数

      # 创建对象的同时设置父对象、设置选项控制
      QFileDialog(QWidget, Union[Qt.WindowFlags, Qt.WindowType])
      
      # 创建对象的同时设置父对象、对话框标题、默认路径、文件过滤器
      QFileDialog(parent: QWidget = None, caption: str = '', directory: str = '', filter: str = '')
      
    • 打开对话框

      open(self)
      open(PYQT_SLOT)                             # 打开后, 会自动连接 filesSelected 信号与此处指定的槽函数PYQT_SLOT
      exec() -> int                               # 返回用户是否按下确定按钮
      
    • 接收模式

      setAcceptMode(QFileDialog.AcceptMode)       # 设置接收模式
       # 参数:QFileDialog.AcceptMode
          #       QFileDialog.AcceptOpen          # 打开模式
          #       QFileDialog.AcceptSave          # 保存模式
        
      acceptMode() -> QFileDialog.AcceptMode      # 获取接收模式
      
    • 默认保存后缀

      setDefaultSuffix(str)                       # 设置默认保存后缀
      defaultSuffix() -> str                      # 获取默认保存后缀
      
    • 设置文件模式

      setFileMode(QFileDialog.FileMode)           # 设置文件模式
          # 参数:QFileDialog.FileMode
          #       QFileDialog.AnyFile                 # 选择单个文件对话框模式(不管文件是否存在,可以直接输入文件名打开不报错)
          #       QFileDialog.ExistingFile            # 选择单个现有文件对话框模式(文件是不存在,直接输入文件名打开会报错)
          #       QFileDialog.ExistingFiles           # 选择多个文件对话框模式
          #       QFileDialog.Directory               # 选择文件夹对话框模式(显示文件名和文件夹名)
          #       Windows文件对话框不支持在目录选择器中显示文件。
      
      fileMode() -> QFileDialog.FileMode              # 获取文件模式
      
    • 设置文件过滤器

      setNameFilter(str)                              # 通过字符串设置文件过滤器
      setNameFilters(Iterable[str])                   # 通过迭代器设置文件过滤器
      
    • 文件显示模式(显示信息的详细程度...Win10无效)

      setViewMode(QFileDialog.ViewMode)               # 设置文件显示模式(Win10无效)
      # 参数:QFileDialog.ViewMode
      #       QFileDialog.Detail                      # 显示详细信息
      #       QFileDialog.List                        # 显示列表
      #       经测试, win10下不太灵光
      
      viewMode() -> QFileDialog.ViewMode              # 获文件显示模式
      
    • 设置指定角色的标签名称

      setLabelText(self, QFileDialog.DialogLabel, str)
      # 参数:QFileDialog.DialogLabel
      #         QFileDialog.FileName                # 文件名标签
      #         QFileDialog.Accept                  # 确定按钮
      #         QFileDialog.Reject                  # 取消按钮
      #         QFileDialog.FileType                # 文件类型
      #         QFileDialog.LookIn                  # 
      
  • 可用信号
    currentChanged(path_str)                        # 当前路径发生改变时,传递选中文件全路径的str对象
    currentUrlChanged(QUrl)                         # 当前路径url发生改变时,传递选中文件全路径的QUrl对象
    
    directoryEntered(directory_str)                 # 选中文件夹发生改变时,传递文件夹全路径的str对象
    directoryUrlEntered(QUrl directory)             # 选中文件夹发生改变时,传递文件夹全路径的QUrl对象
    
    filterSelected(filter_str)                      # 选择名称过滤器时,传递所选择的过滤器名
    
    fileSelected(str)                               # 最终确定选择文件时,传递一个str路径
    urlSelected(QUrl url)                           # 最终确定选择文件时,传递一个QUrl对象
    
    filesSelected([str])                            # 最终确定选择多个文件时,传递包含多个str路径的列表
    urlsSelected(List[QUrl])                        # 最终确定选择多个文件时,传递包含多个QUrl对象的列表
    

  • 代码示例
  • 示例1:QFileDialog静态方法
    from PyQt5.Qt import *
    import sys
    
    class Open_File(QWidget):
        def __init__(self,parent,*args,**kwargs):
            super().__init__(parent)
            self.resize(500, 40)
            self.btn = QPushButton(self)
            self.btn.resize(120, 30)
            self.btn.move(self.width() - 5 - self.btn.width(), 10)
    
            self.led = QLineEdit(self)
            self.led.move(10, 10)
            self.led.resize(self.width() - 3 * 5 - self.btn.width(), 30)
    
        def single_file(self,*args,**kwargs):
            btn_text = args[0]
            self.btn.setText(btn_text)
            def select_file():
                caption = args[1]
                directory = args[2]
                filter = args[3]
                initialFilter = args[4]
                file = QFileDialog.getOpenFileName(self, caption, directory, filter, initialFilter)
                self.led.setText(file[0])
            self.btn.clicked.connect(select_file)
    
        def multiple_files(self, *args, **kwargs):
            btn_text = args[0]
            self.btn.setText(btn_text)
    
            def select_file():
                caption = args[1]
                directory = args[2]
                filter = args[3]
                initialFilter = args[4]
                file = QFileDialog.getOpenFileNames(self, caption, directory, filter, initialFilter)
                fn = ','.join(file[0])
                self.led.setText(fn)
            self.btn.clicked.connect(select_file)
    
        def save_files(self, *args, **kwargs):
            btn_text = args[0]
            self.btn.setText(btn_text)
    
            def select_file():
                caption = args[1]
                directory = args[2]
                filter = args[3]
                initialFilter = args[4]
                file = QFileDialog.getSaveFileName(self, caption, directory, filter, initialFilter)
                self.led.setText(file[0])
            self.btn.clicked.connect(select_file)
    
        def open_direct(self, *args, **kwargs):
            btn_text = args[0]
            self.btn.setText(btn_text)
    
            def select_file():
                caption = args[1]
                directory = args[2]
                file = QFileDialog.getExistingDirectory(self, caption, directory)
                self.led.setText(file)
            self.btn.clicked.connect(select_file)
    
    class Windows(QWidget):
        def __init__(self):
            super().__init__()
            self.setWindowTitle('QFileDialog-静态方法')
            self.resize(500, 500)
            self.widget_list()
    
        def widget_list(self):
            self.add_widget()
    
    
        def add_widget(self):
            caption = '请选择一个文件'
            directory = './'
            filter = '所有文件(*.*);;Word文件(*.doc *.docx);;Excel文件(*.xls *.xlsx);;Python文件(*.py)'
            initialFilter = 'Python文件(*.py)'
    
            w0 = Open_File(self)
            w0.single_file('单文件浏览...',caption,directory,filter,initialFilter)
    
            w1 = Open_File(self)
            w1.multiple_files('多文件浏览...',caption,directory,filter,initialFilter)
            w1.move(0, 50)
    
            w2 = Open_File(self)
            w2.save_files('单文件保存...', caption, directory, filter, initialFilter)
            w2.move(0, 100)
    
            w3 = Open_File(self)
            w3.open_direct('选择文件夹', caption, directory)
            w3.move(0, 200)
    
    
    if __name__ == '__main__':
        app = QApplication(sys.argv)
        window = Windows()
    
        window.show()
        sys.exit(app.exec_())
    
  • 示例2:QFileDialog-功能作用
    from PyQt5.Qt import *
    import sys
    
    class Windows(QWidget):
        def __init__(self):
            super().__init__()
            self.setWindowTitle('QFileDialog-功能作用')
            self.resize(500, 500)
            self.widget_list()
    
        def widget_list(self):
            self.add_widget()
    
    
        def add_widget(self):
            # ****************构造方法****************** 开始
            # 方法一
            filed1 = QFileDialog(self)
    
            # 方法二
            filed = QFileDialog(self,'选择一个文件','./','所有文件(*.*);;Python文件(*.py);;Images(*.jpg *.png *.gif *.bmp)')
            # ****************构造方法****************** 结束
            pass
            # ****************相关设置****************** 开始
            # 设置接收模式
            # filed.setAcceptMode(QFileDialog.AcceptOpen)     # 打开模式
            filed.setAcceptMode(QFileDialog.AcceptSave)       # 保存模式
    
            # 设置默认保存后缀
            filed.setDefaultSuffix('.txt')
    
            # 设置文件模式
            filed.setFileMode(QFileDialog.ExistingFiles)
            # 参数:QFileDialog.FileMode
            #     QFileDialog.AnyFile                 # 选择单个文件对话框模式(不管文件是否存在,可以直接输入文件名打开不报错)
            #     QFileDialog.ExistingFile            # 选择单个现有文件对话框模式(文件是不存在,直接输入文件名打开会报错)
            #     QFileDialog.ExistingFiles           # 选择多个文件对话框模式
            #     QFileDialog.Directory               # 选择文件夹对话框模式(显示文件名和文件夹名)
            #     # Windows文件对话框不支持在目录选择器中显示文件。
    
            # 通过文本设置文件过滤器
            # filed.setNameFilter('所有文件(*.*);;Python文件(*.py);;Images(*.jpg *.png *.gif *.bmp)')
            # 通过迭代器设置文件过滤器
            ls = ['所有文件(*.*)','Python文件(*.py)','Images(*.jpg *.png *.gif *.bmp)']
            filed.setNameFilters(ls)
    
            # 设置文件显示模式(Win10无效)
            filed.setViewMode(QFileDialog.Detail)
            # 参数:QFileDialog.ViewMode
            #       QFileDialog.Detail                      # 显示详细信息
            #       QFileDialog.List                        # 显示列表
    
            # 设置指定角色的标签名称
            filed.setLabelText(QFileDialog.FileName, '疯子的文件名')
            filed.setLabelText(QFileDialog.Accept, '疯子的确定')
            filed.setLabelText(QFileDialog.Reject, '疯子的取消')
            filed.setLabelText(QFileDialog.FileType, '疯子的文件类型')
            filed.setLabelText(QFileDialog.LookIn, '疯子的LookIn')
            # 参数:QFileDialog.DialogLabel
            #         QFileDialog.FileName                # 文件名标签
            #         QFileDialog.Accept                  # 确定按钮
            #         QFileDialog.Reject                  # 取消按钮
            #         QFileDialog.FileType                # 文件类型
            #         QFileDialog.LookIn                  #
            # *****************相关设置***************** 结束
            pass
            # ****************打开对话框****************** 开始
            filed.open()
    
            # filed2.open()
            # ****************打开对话框****************** 结束
    
    
    if __name__ == '__main__':
        app = QApplication(sys.argv)
        window = Windows()
    
        window.show()
        sys.exit(app.exec_())
    
  • 示例3:QFileDailog-可用信号
    from PyQt5.Qt import *
    import sys
    
    class Window(QWidget):
        def __init__(self):
            super(Window, self).__init__()
            self.setWindowTitle('QFileDialog-可用信号')
            self.resize(500, 300)
    
            self.method_list()
    
        def method_list(self):
            self.add_child()
    
        def add_child(self):
            self.filed = QFileDialog(self)
            self.btn = QPushButton('浏览', self)
            self.led = QLineEdit(self)
    
            x = 3
            y = 3
            w = 100
            h = 25
    
            self.btn.resize(w, h)
            self.btn.move(x, y)
            self.led.resize(self.width() - 3 * x - self.btn.width(), self.btn.height())
            self.led.move(self.btn.x()+self.btn.width()+x, self.btn.y())
    
            filter_ls = ['所有文件(*.*)','Python文件(*.py)','文本文件(*.txt)','Excel文件(*.xls *.xlsx)','PDF文件(*.pdf)','Word文件(*.doc *.docx)']
            self.filed.setNameFilters(filter_ls)
            self.filed.setFileMode(QFileDialog.ExistingFiles)
    
            self.btn.clicked.connect(self.select_file)
            # self.filed.open()
    
        def select_file(self):
            # 当前路径发生改变时,传递选中文件全路径的str对象
            self.filed.currentChanged.connect(self.xinhao_cao)
            # 当前路径url发生改变时,传递选中文件全路径的QUrl对象
            self.filed.currentUrlChanged.connect(self.xinhao_cao)
            
            # 选中文件夹发生改变时,传递文件夹全路径的str对象
            self.filed.directoryEntered.connect(self.xinhao_cao)
            # 选中文件夹发生改变时,传递文件夹全路径的QUrl对象
            self.filed.directoryUrlEntered.connect(self.xinhao_cao)
            
            # 选择名称过滤器时,传递所选择的过滤器名
            self.filed.filterSelected.connect(self.xinhao_cao)
            
            # 最终确定选择文件时,传递一个str路径
            self.filed.fileSelected.connect(self.xinhao_cao)
            # 最终确定选择文件时,传递一个QUrl对象
            self.filed.urlSelected.connect(self.xinhao_cao)
            
            # 最终确定选择多个文件时,传递包含多个str路径的列表
            self.filed.filesSelected.connect(self.xinhao_cao)
            # 最终确定选择多个文件时,传递包含多个QUrl对象的列表
            self.filed.urlsSelected.connect(self.xinhao_cao)
    
            self.filed.open()
    
        def xinhao_cao(self,val):
            print(val)
    
    
    
    if __name__ == '__main__':
        app = QApplication(sys.argv)
        window = Window()
        
        window.show()
        sys.exit(app.exec_())
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

失心疯_2023

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值