PyQt5 – QFileDialog小工具

  • Post category:Python

下面是关于使用PyQt5中的QFileDialog小工具的完整使用攻略。

1. 什么是QFileDialog

QFileDialog是PyQt5框架中的一个内置小部件,用于在用户界面中实现文件打开和保存对话框,让用户能够选择文件并将其保存到计算机中。

2. QFileDialog的基本使用方法

2.1 打开文件对话框

使用下面的代码可以在PyQt5中打开文件对话框:

from PyQt5.QtWidgets import QFileDialog, QApplication

app = QApplication([])
file_path, _ = QFileDialog.getOpenFileName(None, "Select a file", "", "All Files (*);;Text Files (*.txt)")

其中,第一个参数是None,表示没有父窗口,第二个参数是对话框标题,第三个参数是默认文件夹路径,第四个参数是过滤器,用于筛选特定类型的文件。getOpenFileName()方法返回文件路径和文件类型(文件后缀名),其中下划线表示我们在这个返回值中不需要使用后面的值。

2.2 保存文件对话框

使用下面的代码可以在PyQt5中打开保存文件对话框:

from PyQt5.QtWidgets import QFileDialog, QApplication

app = QApplication([])
file_path, _ = QFileDialog.getSaveFileName(None, "Save file", "", "All Files (*);;Text Files (*.txt)")

其中参数和getOpenFileName()方法类似。getSaveFileName()方法返回保存的文件路径和文件类型(文件后缀名)。

3. QFileDialog的高级使用方法

3.1 添加自定义文件类型

我们可以通过以下代码使用正则表达式,来将我们所需的文件类型添加到文件过滤器中:

from PyQt5.QtWidgets import QFileDialog, QApplication

app = QApplication([])
file_path, _ = QFileDialog.getOpenFileName(None, "Select a file", "", "All Files (*);;Text Files (*.txt);;Python Files (*.py)")

此处就添加了“Python Files (*.py)”一项,并用分号隔开多个文件类型。

3.2 多选文件对话框

使用下面的代码可以在PyQt5中打开多选文件对话框:

from PyQt5.QtWidgets import QFileDialog, QApplication

app = QApplication([])
file_paths, _ = QFileDialog.getOpenFileNames(None, "Select a file", "", "All Files (*);;Text Files (*.txt);;Python Files (*.py)")

我们将getOpenFileNames()方法替换成getOpenFileName()方法。getOpenFileNames()返回多个文件路径和文件类型(文件后缀名)。

4. 示例说明

4.1 示例一:打开并导入文本文件

以下代码演示了如何使用QFileDialog打开并导入文本文件:

from PyQt5.QtWidgets import QFileDialog, QApplication, QTextEdit, QVBoxLayout, QWidget
import sys

class App(QWidget):

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

    def initUI(self):
        self.textEdit = QTextEdit()
        self.button = QPushButton('Open')
        self.button.clicked.connect(self.openFile)

        vbox = QVBoxLayout()
        vbox.addWidget(self.button)
        vbox.addWidget(self.textEdit)
        self.setLayout(vbox)

    def openFile(self):
        file_dialog = QFileDialog()
        file_dialog.setFileMode(QFileDialog.AnyFile)
        file_dialog.setNameFilter("Text files (*.txt);;All files (*)")

        if file_dialog.exec_() == QDialog.Accepted:
            file_path = file_dialog.selectedFiles()[0]
            with open(file_path, "r") as file:
                self.textEdit.setText(file.read())

app = QApplication(sys.argv)
window = App()
window.show()
sys.exit(app.exec_())

此程序创建了一个QTextEdit组件,供用户输入文本。当用户点击打开按钮时,程序调用openFile()方法,打开一个QFileDialog,并使用setFileMode()方法来设置文件模式,setNameFilter()方法来设置过滤器。在接受用户选择后,程序将用户选择的文本文件读取,并在QTextEdit组件中显示。

4.2 示例二:保存文本文件

以下代码演示了如何使用QFileDialog保存文本文件:

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

class App(QWidget):

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

    def initUI(self):
        self.textEdit = QTextEdit()
        self.button = QPushButton('Save')
        self.button.clicked.connect(self.saveFile)

        vbox = QVBoxLayout()
        vbox.addWidget(self.button)
        vbox.addWidget(self.textEdit)
        self.setLayout(vbox)

    def saveFile(self):
        file_dialog = QFileDialog()
        file_dialog.setDefaultSuffix('txt')
        file_dialog.setAcceptMode(QFileDialog.AcceptSave)
        file_dialog.setNameFilter("Text files (*.txt);;All files (*)")

        if file_dialog.exec_() == QDialog.Accepted:
            file_path = file_dialog.selectedFiles()[0]
            with open(file_path, "w") as file:
                file.write(self.textEdit.toPlainText())

app = QApplication(sys.argv)
window = App()
window.show()
sys.exit(app.exec_())

此程序创建了一个可编辑的QTextEdit组件,当用户点击保存按钮时,程序打开一个QFileDialog,并使用setDefaultSuffix()方法来设置文件的默认后缀名,setAcceptMode()方法来设置对话框的模式为保存模式,setNameFilter()方法来设置过滤器。在保存文件选择后,程序将QTextEdit组件中的文本内容写入保存文件中。

以上就是关于PyQt5中QFileDialog小工具的完整使用攻略的说明和示例。