- 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文档,并自定义内容,之后运行上述程序,修改再保存。