PyQt5 QFileDialog小工具

  • Post category:Python

针对PyQt5 QFileDialog小工具的使用攻略我会分为以下几个部分来讲解:

  1. PyQt5 QFileDialog介绍
  2. PyQt5 QFileDialog基础使用方法
  3. PyQt5 QFileDialog高级用法
  4. 示例1:打开和保存文件
  5. 示例2:打开和保存多个文件

接下来我们就分别来看这些内容。

1. PyQt5 QFileDialog介绍

QFileDialog是PyQt5中的一个文件对话框,用于打开、保存或选择文件夹。它允许用户通过GUI来浏览文件系统来获取文件或目录的名称。在PyQt5中,QFileDialog的使用可以极大地简化文件操作相关视图的设计以及与用户交互的流程。

2. PyQt5 QFileDialog 基础使用方法

下面是PyQt5中使用QFileDialog模块的基础使用方法:

from PyQt5.QtWidgets import QApplication, QFileDialog

app = QApplication([])
file_path, _ = QFileDialog.getOpenFileName(None, '选择单个文件', '', 'All Files (*);;Text Files (*.txt)')

  • 第一个参数是一个QWidget类型,这里设置为None,没有父窗口,打开的对话框是一个顶层窗口。
  • 第二个参数是对话框的标题。
  • 第三个参数是默认打开的目录。
  • 第四个参数是文件过滤器,用于限制用户可以选择的文件类型,所有文件 () 等价于不设置,而 Text Files (.txt) 过滤掉非txt文件。

getOpenFileName函数在运行后会弹出一个对话框,让用户选择一个文件,仿照上面使用getOpenFileName的方法,也可以使用getOpenFileNames函数打开多个文件。如果用户点击了“确定”,则对话框返回一个Tuple,包含了文件的路径和文件类型过滤器的名称。

还可以使用下面的命令打开“保存文件”对话框:

file_path, _ = QFileDialog.getSaveFileName(None, '保存文件', '', 'All Files (*);;Text Files (*.txt)')

可以看到,该函数使用方法与打开文件对话框的getOpenFileName函数非常类似,只是函数名有所不同。

3. PyQt5 QFileDialog高级用法

如果您要访问的文件或目录不受文件系统的限制,则可以使用QFileDialog.getExistingDirectory()或QFileDialog.getExistingDirectoryUrl()函数查找目录或QFileDialog.getNameFilters()检索过滤器列表。

在显示对话框之前,您可以调用setDirectory()方法设置初始目录。

dlg = QFileDialog()
dlg.setDirectory('/home')
dlg.show()
result = dlg.exec_()
selected_files = dlg.selectedFiles()

在上面的示例中,我们创建QFileDialog并将其设置为以/home目录作为默认目录打开。然后我们打开对话框并等待用户交互。一旦对话框关闭,我们检索用户选择的文件列表。

4. 示例1:打开和保存文件

下面我们将使用一个示例演示如何使用“PyQt5 QFileDialog小工具”来实现打开和保存文件的功能。

import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QTextEdit, QAction, QFileDialog


class MainWindow(QMainWindow):

    def __init__(self):
        super().__init__()

        self.initUI()

    def initUI(self):

        self.textEdit = QTextEdit()
        self.setCentralWidget(self.textEdit)

        openFile = QAction('打开文件', self)
        openFile.setShortcut('Ctrl+O')
        openFile.triggered.connect(self.showDialog)

        saveFile = QAction('保存文件', self)
        saveFile.setShortcut('Ctrl+S')
        saveFile.triggered.connect(self.saveDialog)

        menubar = self.menuBar()
        fileMenu = menubar.addMenu('文件')
        fileMenu.addAction(openFile)
        fileMenu.addAction(saveFile)

        self.setGeometry(300, 300, 350, 300)
        self.setWindowTitle('文件操作小工具')
        self.show()

    def showDialog(self):

        fname, _ = QFileDialog.getOpenFileName(self, '打开文件', '/home')

        if fname:
            with open(fname, 'r') as f:
                data = f.read()
                self.textEdit.setText(data)

    def saveDialog(self):

        options = QFileDialog.Options()
        options |= QFileDialog.DontUseNativeDialog
        fileName, _ = QFileDialog.getSaveFileName(self,"保存文件","","All Files (*);;Text Files (*.txt)", options=options)
        if fileName:
            with open(fileName, 'w') as f:
                text = self.textEdit.toPlainText()
                f.write(text)


if __name__ == '__main__':

    app = QApplication(sys.argv)
    ex = MainWindow()
    sys.exit(app.exec_())

此示例演示了如何创建一个具有打开和保存文件功能的GUI。在主窗口中,我们创建了两个工具栏按钮分别执行 ‘showDialog’ 和 ‘saveDialog’ 方法。可以看到,我们使用了QFileDialog模块中的getOpenFileName()和getSaveFileName()方法。

5. 示例2:打开和保存多个文件

下面这个示例演示了如何使用“PyQt5 QFileDialog小工具”来实现打开和保存多个文件的功能。与前一个示例不同的是,我们将演示如何打开多个文件。

import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QTextEdit, QAction, QFileDialog


class MainWindow(QMainWindow):

    def __init__(self):
        super().__init__()

        self.initUI()

    def initUI(self):

        self.textEdit = QTextEdit()
        self.setCentralWidget(self.textEdit)

        openFile = QAction('打开文件', self)
        openFile.setShortcut('Ctrl+O')
        openFile.triggered.connect(self.showDialog)

        saveFile = QAction('保存文件', self)
        saveFile.setShortcut('Ctrl+S')
        saveFile.triggered.connect(self.saveDialog)

        menubar = self.menuBar()
        fileMenu = menubar.addMenu('文件')
        fileMenu.addAction(openFile)
        fileMenu.addAction(saveFile)

        self.setGeometry(300, 300, 350, 300)
        self.setWindowTitle('文件操作小工具')
        self.show()

    def showDialog(self):

        options = QFileDialog.Options()
        options |= QFileDialog.DontUseNativeDialog
        files, _ = QFileDialog.getOpenFileNames(self,"打开文件","","All Files (*);;Text Files (*.txt)", options=options)

        if files:
            for file in files:
                with open(file, 'r') as f:
                    data = f.read()
                    self.textEdit.setText(data)

    def saveDialog(self):

        options = QFileDialog.Options()
        options |= QFileDialog.DontUseNativeDialog
        files, _ = QFileDialog.getSaveFileNames(self,"保存文件","","All Files (*);;Text Files (*.txt)", options=options)

        if files:
            for file in files:
                with open(file, 'w') as f:
                    text = self.textEdit.toPlainText()
                    f.write(text)


if __name__ == '__main__':

    app = QApplication(sys.argv)
    ex = MainWindow()
    sys.exit(app.exec_())

这个示例具有与前一个示例相同的功能,即“打开文件”和“保存文件”。不同的是,我们使用getOpenFileNames()和getSaveFileNames()方法,前者以列表的形式返回选定的文件而不是单个文件,后者则将多个文件保存在一个文件夹中。

以上就是PyQt5 QFileDialog小工具的使用攻略及两个示例。希望能对您有所帮助。