首页 > 其他分享 >21.PyQt5【基本组件】文件对话框-QFileDialog

21.PyQt5【基本组件】文件对话框-QFileDialog

时间:2023-01-16 10:56:10浏览次数:53  
标签:文件 21 对话框 self PyQt5 QFileDialog file path

一、前言

QFileDialog小部件是一个文件选择器对话框。它使用户能够浏览文件系统并选择要打开或保存的文件。对话框通过静态函数或调用调用exec_()对话框对象上的函数。

二、学习目标

1.QFileDialog常用方法

2.QFileDialog常用信号

3.QFileDialog组件的应用

三、知识点

1.【QFileDialog常用方法】

方法 描述
getOpenFileName() 选择文件。
4个参数分别是父控件、标题、起始路径、文件扩展名过滤。返回值是由两个字符串构成的元组。元组第一个元素是文件名,第二个是文件类型名;返回文件路径、文件类型
getExistingDirectory() 选择文件夹。
3个参数分别是父控件、标题、起始路径。返回值是字符串;返回文件夹路径
getSaveFileName() 文件保存。
4个参数分别是父控件、标题、起始路径、文件扩展名过滤。返回值是由两个字符串构成的元组。元组第一个元素是文件名,第二个是文件类型名。
setAcceptMode() 确定文件框是作为打开还是保存对话框
QFileDialog.AcceptOpen:打开文件
QFileDialog.AcceptSave:保存文件
setFileMode() 可选择文件的类型。枚举常量是 :
QFileDialog.AnyFile:文件名,不管它是否存在。
QFileDialog.ExistingFile:单个现有文件的名称。
QFileDialog.Directory:目录的名称。 显示文件和目录。
QFileDialog.ExistingFiles:零个或多个现有文件的名称。
setDirectory() 设置打开时的目录
selectedFiles() 获取选择的文件列表
setNameFilter() 设置文件名过滤,如:Images (*.py *.xpm *.jpg)

2.【QFileDialog常用信号】

QFileDialog组件一般不需要用到信号。

信号 描述
currentChanged(path) 当当前文件更改以进行本地操作时,会发出此信号,并将新文件名作为路径参数。
currentUrlChanged(url) 当当前文件更改时,会发出此信号,并将新文件 URL 作为 url 参数。
directoryEntered(directory) 当用户进入目录时,会发出此信号用于本地操作。
directoryUrlEntered(directory) 当用户进入目录时会发出这个信号。
fileSelected(file) 当本地操作的选择发生变化并且对话框被接受时,该信号与选定文件一起发出。
filesSelected(files) 当本地操作的选择发生变化并且对话框被接受时,该信号与所选文件的列表一起发出。
filterSelected(filter) 当用户选择过滤器时会发出此信号。
urlSelected(url) 当选择更改且对话框被接受时,此信号将与所选 url 一起发出。
urlsSelected(urls) 当选择更改且对话框被接受时,此信号将与所选 URL 列表一起发出。

3.【QFileDialog组件的应用】

import os
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QPushButton, QFileDialog


class QmyWidget(QWidget):

    def __init__(self, parent=None):
        super().__init__(parent)  # 调用父类的构造函数,创建QWidget窗体
        self.setupUi()

    def setupUi(self):
        """页面初始化"""
        # 设置窗体大小及标题
        self.resize(500, 400)
        self.setWindowTitle("QFileDialog组件示例")
        # 创建布局
        self.layout = QVBoxLayout()
        # 创建两个按钮组件
        self.button1 = QPushButton("选择文件", self)
        self.button1.clicked.connect(self.select_file)  # 为button绑定消息对话框
        self.button2 = QPushButton("选择文件夹", self)
        self.button2.clicked.connect(self.select_dir)  # 为button绑定消息对话框
        self.button3 = QPushButton("保存文件", self)
        self.button3.clicked.connect(self.save_file)  # 为button绑定消息对话框
        # 将组件添加到布局中
        self.layout.addWidget(self.button1)
        self.layout.addWidget(self.button2)
        self.layout.addWidget(self.button3)
        # 为窗体添加布局
        self.setLayout(self.layout)

    def select_file(self):
        """选择文件对话框"""
        # QFileDialog组件定义
        fileDialog = QFileDialog(self)
        # QFileDialog组件设置
        fileDialog.setWindowTitle("标题")             # 设置对话框标题
        fileDialog.setFileMode(QFileDialog.AnyFile)  # 设置能打开文件的格式
        fileDialog.setDirectory(r'D:\01MyCode\01DemoCode\pyqt5_widgets\img')  # 设置默认打开路径
        fileDialog.setNameFilter("Images (*.png *.xpm *.jpg)")  # 按文件名过滤
        file_path = fileDialog.exec()                # 窗口显示,返回文件路径
        if file_path and fileDialog.selectedFiles():
            print("选择文件成功:{}".format(fileDialog.selectedFiles()[0]))

        # 方式二
        # file_path, file_type = QFileDialog.getOpenFileName(self, '标题', os.getcwd(), 'Images (*.png *.xpm *.jpg)')
        # if file_path and file_type:
        #     print("选择文件成功:{}".format(file_path))

    def select_dir(self):
        """选择文件夹对话框架"""
        dir_path = QFileDialog.getExistingDirectory(self, '标题', os.getcwd())
        if dir_path:
            print("选择文件夹成功:{}".format(dir_path))

    def save_file(self):
        """文件另存对话框"""
        file_path, file_type = QFileDialog.getSaveFileName(self, '标题', os.getcwd(), 'All Files (*)')
        if file_path and file_type:
            content = '这是一段文本'
            with open(file_path, 'w', encoding='utf-8') as f:
                f.write(content)
            print("保存文件成功:{}".format(file_path))


if __name__ == '__main__':
    app = QApplication(sys.argv)
    myMain = QmyWidget()
    myMain.show()
    sys.exit(app.exec_())
  • 关键代码

            # QFileDialog组件定义
            fileDialog = QFileDialog(self)
            # QFileDialog组件设置
            fileDialog.setWindowTitle("标题")             # 设置对话框标题
            fileDialog.setFileMode(QFileDialog.AnyFile)  # 设置能打开文件的格式
            fileDialog.setDirectory(r'D:\01MyCode\01DemoCode\pyqt5_widgets\img')  # 设置默认打开路径
            fileDialog.setNameFilter("Images (*.png *.xpm *.jpg)")  # 按文件名过滤
            file_path = fileDialog.exec()                # 窗口显示,返回文件路径
            if file_path and fileDialog.selectedFiles():
                print("选择文件成功:{}".format(fileDialog.selectedFiles()[0]))
    
            # 方式二
            # file_path, file_type = QFileDialog.getOpenFileName(self, '标题', os.getcwd(), 'Images (*.png *.xpm *.jpg)')
            # if file_path and file_type:
            #     print("选择文件成功:{}".format(file_path))
    

标签:文件,21,对话框,self,PyQt5,QFileDialog,file,path
From: https://www.cnblogs.com/ckxingchen/p/17054878.html

相关文章

  • 23.PyQt5【高级组件】表格组件-QTableWidget
    一、前言QTableWidget是常用的显示数据表格的控件,使用QTableWidget时就需要QTableWidgetItem。用来表示表格中的一个单元格,整个表格就是用各个单元格构建起来的。二、学......
  • 25.PyQt5【高级组件】选项卡-QTabWidget
    一、前言如果表单有太多需要同时显示的字段,可以将它们排列在不同的页面中,放置在选项卡式小部件的每个选项卡下。提供了一个标签栏和一个页面区域。显示第一个选项卡下的页......
  • 24.PyQt5【高级组件】树形组件-QTreeWidget
    一、前言QTreeWidget使用类似于QListView类的方式提供一种典型的基于item的树形交互方法类,该类基于QT的“模型/视图”结构,提供了默认的模型来支撑item的显示,这些i......
  • 26.PyQt5【高级组件】工具箱-QToolBox
    一、前言QToolBox控件提供了一个可进行一列选项卡操作方式,在每个选项卡内可包含不同的控件布局。QToolBox将选项卡一个一个地显示,当前项目显示在当前选项卡下方。每个选项......
  • 3.PyQt5【窗口组件】主窗口-QMainWindow
    一、前言QMainWindow类提供一个有菜单条、锚接窗口(例如工具条)和一个状态条的主应用程序窗口。主窗口通常用在提供一个大的中央窗口部件(例如文本编辑或者绘制画布)以及周围......
  • 4.PyQt5【布局组件】水平布局-QHBoxLayout
    一、前言QLayout是Qt中布局管理器的抽象基类,通过对QLayout的继承,实现了功能各异且互补的布局管理器。布局管理器不是界面组件,而是界面组件的定位策略;任意容器类型的组件都......
  • 5.PyQt5【布局组件】垂直布局-QVBoxLayout
    一、前言本节我们介绍布局组件中的垂直布局QVBoxLayout。二、学习目标1.QVBoxLayout垂直布局应用三、知识点1.【QVBoxLayout垂直布局应用】垂直布局将多个控件在垂直......
  • 6.PyQt5【布局组件】网格布局-QGridLayout
    一、前言本节我们介绍布局组件中的网格布局QGridLayout。二、学习目标1.QGridLayout网格布局的应用三、知识点1.【QGridLayout网格布局的应用】网格布局也称栅格布局......
  • 7.PyQt5【布局组件】表单布局-QFormLayout
    一、前言本节我们介绍布局组件中的表单布局QFormLayout。二、学习目标1.QFormLayout表单布局的应用三、知识点1.【QFormLayout表单布局的应用】表单布局以两列的形式......
  • 9.PyQt5【布局组件】区域分隔器-QSplitter
    一、前言本节我们介绍布局组件中的区域分隔器QSplitter。二、学习目标1.QSplitter区域分隔器的应用三、知识点1.【QSplitter区域分隔器的应用】QSplitter是一个带切......