使用 PyQt 快速搭建带有 GUI 的应用(7)–打开文件和文件夹

王 茂南 2021年5月7日07:35:23
评论
1 4287字阅读14分17秒
摘要本文介绍在 PyQt 中最常见的功能,选择对应的文件,或是选择对应的文件夹,使用系统默认的应用打开相应的文件。本文会通过一个例子,介绍上面的三个功能。

简介

应用中最常见的就是选择对应的文件,或是选择对应的文件夹。这一篇我们就通过一个例子,来介绍如何通过 PyQt 来打开选择文件的窗口,选择对应的文件,或是文件夹。这里主要介绍三种:

  • 选择文件,获得文件的路径;
  • 选择文件夹,获得文件夹的路径;
  • 打开文件,使用系统默认的应用打开相应的文件(例如打开 txt 文件);

关于 PyQt 的入门介绍,可以查看链接,使用 PyQt 快速搭建带有 GUI 的应用(1)–初识 PyQt

 

PyQt 打开文件和文件夹

主界面的设计

我们首先创建应用的主界面,我们纯手写一个界面,一共有三行,每行都是一个按钮,和一个用来显示文件路径的。完整的代码如下所示:

  1. import os
  2. import sys
  3. from PyQt5.QtWidgets import QGridLayout, QApplication, QDialog, QLineEdit, QPushButton, QFileDialog
  4. class Dialog(QDialog):
  5.     def __init__(self, parent=None):
  6.         super().__init__(parent)
  7.         grid = QGridLayout()
  8.         # 第一行, 打开文件
  9.         self.qlineEdit_selectfile = QLineEdit('文件路径')
  10.         self.qpush_selectfile = QPushButton('选择文件')
  11.         grid.addWidget(self.qlineEdit_selectfile, 0, 1)
  12.         grid.addWidget(self.qpush_selectfile, 0, 2)
  13.         # 第二行, 打开文件夹
  14.         self.qlineEdit_selectfolder = QLineEdit('文件夹路径')
  15.         self.qpush_selectfolder = QPushButton('选择文件夹')
  16.         grid.addWidget(self.qlineEdit_selectfolder, 1, 1)
  17.         grid.addWidget(self.qpush_selectfolder, 1, 2)
  18.         # 第三行, 按钮, 打开文件
  19.         self.qpush_openfile = QPushButton('打开文件')
  20.         grid.addWidget(self.qpush_openfile, 2, 2)
  21.         self.setLayout(grid)
  22. if __name__ == '__main__':
  23.     app = QApplication(sys.argv)
  24.     dlg = Dialog()
  25.     dlg.show()
  26.     sys.exit(app.exec_())

最终的界面如下所示:

使用 PyQt 快速搭建带有 GUI 的应用(7)–打开文件和文件夹

上面的界面会有三个按钮:

  • 点击第一个按钮,选择文件,会点击弹出一个文件选择框,选择文件,返回文件路径。
  • 点击第二个按钮,选择文件夹,会点击弹出一个文件选择框,选择文件夹,返回文件夹路径。
  • 点击第三个按钮,打开文件,使用系统默认的应用打开相应的文件。

完善主要功能-打开文件和文件夹

下面我们完善上面的三个按钮,实现相应的功能。首先完善「选择文件」的功能(这里使用的是 QFileDialog.getOpenFileName)。功能函数如下所示,同时需要绑定按钮:

  1. # 绑定按钮
  2. self.qpush_selectfile.clicked.connect(self.select_file)
  3. def select_file(self):
  4.     """选择文件
  5.     """
  6.     filename, _ = QFileDialog.getOpenFileName(self, "getOpenFileName",
  7.                                                         './',  # 文件的起始路径
  8.                                                         "All Files (*);;JSON Files (*.json)") # 设置文件类型
  9.     self.qlineEdit_selectfile.setText(filename)

上面功能完成后,可以实现如下的操作:

使用 PyQt 快速搭建带有 GUI 的应用(7)–打开文件和文件夹

接着完善「选择文件夹」的功能,这里使用 QFileDialog.getExistingDirectory

  1. # 绑定按钮
  2. self.qpush_selectfolder.clicked.connect(self.select_folder)
  3. def select_folder(self):
  4.     """选择文件夹
  5.     """
  6.     foldername = QFileDialog.getExistingDirectory(self, "Select Directory", "./")
  7.     self.qlineEdit_selectfolder.setText(foldername)

上面功能完成后,可以实现如下的操作:

使用 PyQt 快速搭建带有 GUI 的应用(7)–打开文件和文件夹

最后我们完善「打开文件」的功能,将上面「选择的文件」打开。

  1. # 绑定按钮
  2. self.qpush_openfile.clicked.connect(self.open_file)
  3. def open_file(self):
  4.     """使用系统的应用打开
  5.     """
  6.     os.startfile(self.qlineEdit_selectfile.text())

上面功能完成后,可以实现如下的操作。点击对应按钮之后,就会打开相应的 txt 文件

使用 PyQt 快速搭建带有 GUI 的应用(7)–打开文件和文件夹

 

完整的代码

上面分别实现了界面和功能,并与按钮进行了绑定。下面是完整的代码:

  1. import os
  2. import sys
  3. from PyQt5.QtWidgets import QGridLayout, QApplication, QDialog, QLineEdit, QPushButton, QFileDialog
  4. class Dialog(QDialog):
  5.     def __init__(self, parent=None):
  6.         super().__init__(parent)
  7.         grid = QGridLayout()
  8.         # 第一行, 打开文件
  9.         self.qlineEdit_selectfile = QLineEdit('文件路径')
  10.         self.qpush_selectfile = QPushButton('选择文件')
  11.         grid.addWidget(self.qlineEdit_selectfile, 0, 1)
  12.         grid.addWidget(self.qpush_selectfile, 0, 2)
  13.         # 第二行, 打开文件夹
  14.         self.qlineEdit_selectfolder = QLineEdit('文件夹路径')
  15.         self.qpush_selectfolder = QPushButton('选择文件夹')
  16.         grid.addWidget(self.qlineEdit_selectfolder, 1, 1)
  17.         grid.addWidget(self.qpush_selectfolder, 1, 2)
  18.         # 第三行, 按钮, 打开文件
  19.         self.qpush_openfile = QPushButton('打开文件')
  20.         grid.addWidget(self.qpush_openfile, 2, 2)
  21.         self.setLayout(grid)
  22.         # 绑定按钮
  23.         self.qpush_selectfile.clicked.connect(self.select_file)
  24.         self.qpush_selectfolder.clicked.connect(self.select_folder)
  25.         self.qpush_openfile.clicked.connect(self.open_file)
  26.     def select_file(self):
  27.         """选择文件
  28.         """
  29.         filename, _ = QFileDialog.getOpenFileName(self, "getOpenFileName",
  30.                                                          './',  # 文件的起始路径
  31.                                                          "All Files (*);;JSON Files (*.json)") # 设置文件类型
  32.         self.qlineEdit_selectfile.setText(filename)
  33.     def select_folder(self):
  34.         """选择文件夹
  35.         """
  36.         foldername = QFileDialog.getExistingDirectory(self, "Select Directory", "./")
  37.         self.qlineEdit_selectfolder.setText(foldername)
  38.     def open_file(self):
  39.         """使用系统的应用打开
  40.         """
  41.         os.startfile(self.qlineEdit_selectfile.text())
  42. if __name__ == '__main__':
  43.     app = QApplication(sys.argv)
  44.     dlg = Dialog()
  45.     dlg.show()
  46.     sys.exit(app.exec_())

 

  • 微信公众号
  • 关注微信公众号
  • weinxin
  • QQ群
  • 我们的QQ群号
  • weinxin
王 茂南
  • 本文由 发表于 2021年5月7日07:35:23
  • 转载请务必保留本文链接:https://mathpretty.com/13690.html
匿名

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: