跳至正文
View Categories

1 min read

    主要内容 #

  1. QFileDialog复合实践

完成效果 #

完成本节课程,能学会用QFlieDialog指定打开文件,并且将文件的内容展示在QLineEdit中,且可以在QLineEdit中修改内容,保存在新的文件中。

收获 #

学习完本节内容,我们会了解如何将文件内容显示在文本编辑框中,以及如何将修改后的文本框内容保存到新文件中。

1.QFileDialog复合实践 #

声明:事先已经在读取路径中创建好了一个名为example的txt文件,给后面打开使用。
在本复合实践中,首先在窗口应用程序中新增一个QLineEdit控件,然后创建QFileDialog.getOpenFileName对话框选择要打开的文件。
用户选择example.txt文件之后点击对话框的打开按钮,对话框自动关闭,文件内容会显示到文本框上。
然后在文本框中修改内容,修改完成后按回车键,弹出QFileDialog.getSaveFileName对话框,用户输入要新存的文件名(本例中命名为new),
然后点击对话框的保存按钮,即会自动创建并保存new.txt文件。
以下是代码实现示例:

from PyQt5.QtWidgets import (QMainWindow, QLineEdit, QAction, QFileDialog, QApplication)
from PyQt5.QtGui import QIcon
import sys

class Example(QMainWindow):

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


    def initUI(self):      
        self.lineEdit = QLineEdit(self)  # 创建一个文本编辑框
        self.lineEdit.setGeometry(50,100, 200,20)  # 设置位置和大小
        # QFileDialog.getOpenFileName()创建文件对话框来选择文件,第一个参数用于指定父组件,
        # 第二个参数是QFileDialog对话框的标题,第三个参数是打开的目录路径,
        # 第四个参数是指定显示的文件类型 本例中指定操作txt文本文件(读取和保存都限定于txt)
        # 返回值filename是用户选择的文件名(包含路径),filetype是文件的类型
        filename, filetype = QFileDialog.getOpenFileName(self, '打开文件', 'D:\\Python_Tips\\Dashima\\pics', 'Text Files (*.txt)')
        if filename:  # 如果文件名不为空,即选择了一个文件
            # python open() 函数用于打开一个文件,创建一个 file 对象。
            # 其第一个参数是文件名,第二个参数是打开模式,r代表只读模式
            with open(filename, 'r') as data:  # 则打开并读取名为filename的文件内容
                content = data.read()  # read方法可以读取txt文档的所有内容
        self.lineEdit.setText(content)  # 把文档内容显示在文本框中
        # 然后用户可以更改文本框的内容,编辑完毕后按回车键,触发returnPressed信号
        # 该信号与槽函数saveChange相连
        self.lineEdit.returnPressed.connect(self.saveChange)  
        
        self.setGeometry(300, 300, 500, 500)
        self.setWindowTitle('File dialog')
        self.show()


    def saveChange(self):  # 槽函数,用来将更改之后的文本框内容存为新文件
        content2 = self.lineEdit.text()  # text()方法获取当前文本框的内容
        # QFileDialog.getSaveFileName()打开文件资源管理器,获得你需要保存的文件名和文件类型
        # 参数及返回值意义与getOpenFileName()一致
        filename2, filetype2 = QFileDialog.getSaveFileName(self, '读取文件', 'D:\\Python_Tips\\Dashima\\pics', 'Text Files (*.txt)')
        if filename2:  # 如果文件名不为空,即用户输入了保存的新文件名
            # open()函数第二个参数'w'代表用写入模式打开文件,
            # 如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。
            # 如果该文件不存在,创建新文件。
            with open(filename2, 'w') as new:  # 打开名为filename2的文件
                new.write(content2)  # 将文本框内容写入filename2中
app = QApplication(sys.argv)    # 创建应用程序
ex = Example()  # 创建窗口对象
sys.exit(app.exec_())   # 设置关闭窗口后结束进程

拓展练习:运行程序后,文本框可以多次修改,每次修改完成后按回车即可保存为新文件,请尝试每次修改为不同的内容并保存。

小结 #

  • 学习了如何将打开文件的内容显示在文本框中。
  • 学习了如何将修改之后的文本框内容储存为新文件。
  • 习题 #

    1. 习题1:尝试自己新建一个txt文档,并自定义内容,之后运行上述程序,修改再保存。