文章目录(Table of Contents)
简介
应用中最常见的就是选择对应的文件,或是选择对应的文件夹。这一篇我们就通过一个例子,来介绍如何通过 PyQt
来打开选择文件的窗口,选择对应的文件,或是文件夹。这里主要介绍三种:
- 选择文件,获得文件的路径;
- 选择文件夹,获得文件夹的路径;
- 打开文件,使用系统默认的应用打开相应的文件(例如打开 txt 文件);
关于 PyQt 的入门介绍,可以查看链接,使用 PyQt 快速搭建带有 GUI 的应用(1)–初识 PyQt
PyQt 打开文件和文件夹
主界面的设计
我们首先创建应用的主界面,我们纯手写一个界面,一共有三行,每行都是一个按钮,和一个用来显示文件路径的。完整的代码如下所示:
- import os
- import sys
- from PyQt5.QtWidgets import QGridLayout, QApplication, QDialog, QLineEdit, QPushButton, QFileDialog
- class Dialog(QDialog):
- def __init__(self, parent=None):
- super().__init__(parent)
- grid = QGridLayout()
- # 第一行, 打开文件
- self.qlineEdit_selectfile = QLineEdit('文件路径')
- self.qpush_selectfile = QPushButton('选择文件')
- grid.addWidget(self.qlineEdit_selectfile, 0, 1)
- grid.addWidget(self.qpush_selectfile, 0, 2)
- # 第二行, 打开文件夹
- self.qlineEdit_selectfolder = QLineEdit('文件夹路径')
- self.qpush_selectfolder = QPushButton('选择文件夹')
- grid.addWidget(self.qlineEdit_selectfolder, 1, 1)
- grid.addWidget(self.qpush_selectfolder, 1, 2)
- # 第三行, 按钮, 打开文件
- self.qpush_openfile = QPushButton('打开文件')
- grid.addWidget(self.qpush_openfile, 2, 2)
- self.setLayout(grid)
- if __name__ == '__main__':
- app = QApplication(sys.argv)
- dlg = Dialog()
- dlg.show()
- sys.exit(app.exec_())
最终的界面如下所示:
上面的界面会有三个按钮:
- 点击第一个按钮,
选择文件
,会点击弹出一个文件选择框,选择文件,返回文件路径。 - 点击第二个按钮,
选择文件夹
,会点击弹出一个文件选择框,选择文件夹,返回文件夹路径。 - 点击第三个按钮,
打开文件
,使用系统默认的应用打开相应的文件。
完善主要功能-打开文件和文件夹
下面我们完善上面的三个按钮,实现相应的功能。首先完善「选择文件」的功能(这里使用的是 QFileDialog.getOpenFileName
)。功能函数如下所示,同时需要绑定按钮:
- # 绑定按钮
- self.qpush_selectfile.clicked.connect(self.select_file)
- def select_file(self):
- """选择文件
- """
- filename, _ = QFileDialog.getOpenFileName(self, "getOpenFileName",
- './', # 文件的起始路径
- "All Files (*);;JSON Files (*.json)") # 设置文件类型
- self.qlineEdit_selectfile.setText(filename)
上面功能完成后,可以实现如下的操作:
接着完善「选择文件夹」的功能,这里使用 QFileDialog.getExistingDirectory
。
- # 绑定按钮
- self.qpush_selectfolder.clicked.connect(self.select_folder)
- def select_folder(self):
- """选择文件夹
- """
- foldername = QFileDialog.getExistingDirectory(self, "Select Directory", "./")
- self.qlineEdit_selectfolder.setText(foldername)
上面功能完成后,可以实现如下的操作:
最后我们完善「打开文件」的功能,将上面「选择的文件」打开。
- # 绑定按钮
- self.qpush_openfile.clicked.connect(self.open_file)
- def open_file(self):
- """使用系统的应用打开
- """
- os.startfile(self.qlineEdit_selectfile.text())
上面功能完成后,可以实现如下的操作。点击对应按钮之后,就会打开相应的 txt 文件:
完整的代码
上面分别实现了界面和功能,并与按钮进行了绑定。下面是完整的代码:
- import os
- import sys
- from PyQt5.QtWidgets import QGridLayout, QApplication, QDialog, QLineEdit, QPushButton, QFileDialog
- class Dialog(QDialog):
- def __init__(self, parent=None):
- super().__init__(parent)
- grid = QGridLayout()
- # 第一行, 打开文件
- self.qlineEdit_selectfile = QLineEdit('文件路径')
- self.qpush_selectfile = QPushButton('选择文件')
- grid.addWidget(self.qlineEdit_selectfile, 0, 1)
- grid.addWidget(self.qpush_selectfile, 0, 2)
- # 第二行, 打开文件夹
- self.qlineEdit_selectfolder = QLineEdit('文件夹路径')
- self.qpush_selectfolder = QPushButton('选择文件夹')
- grid.addWidget(self.qlineEdit_selectfolder, 1, 1)
- grid.addWidget(self.qpush_selectfolder, 1, 2)
- # 第三行, 按钮, 打开文件
- self.qpush_openfile = QPushButton('打开文件')
- grid.addWidget(self.qpush_openfile, 2, 2)
- self.setLayout(grid)
- # 绑定按钮
- self.qpush_selectfile.clicked.connect(self.select_file)
- self.qpush_selectfolder.clicked.connect(self.select_folder)
- self.qpush_openfile.clicked.connect(self.open_file)
- def select_file(self):
- """选择文件
- """
- filename, _ = QFileDialog.getOpenFileName(self, "getOpenFileName",
- './', # 文件的起始路径
- "All Files (*);;JSON Files (*.json)") # 设置文件类型
- self.qlineEdit_selectfile.setText(filename)
- def select_folder(self):
- """选择文件夹
- """
- foldername = QFileDialog.getExistingDirectory(self, "Select Directory", "./")
- self.qlineEdit_selectfolder.setText(foldername)
- def open_file(self):
- """使用系统的应用打开
- """
- os.startfile(self.qlineEdit_selectfile.text())
- if __name__ == '__main__':
- app = QApplication(sys.argv)
- dlg = Dialog()
- dlg.show()
- sys.exit(app.exec_())
- 微信公众号
- 关注微信公众号
- QQ群
- 我们的QQ群号
评论