- 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:尝试自己新建一个txt文档,并自定义内容,之后运行上述程序,修改再保存。