7

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

 3 years ago
source link: https://mathpretty.com/13690.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

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

所属分类:Python库介绍

摘要本文介绍在 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.     filename, _ = QFileDialog.getOpenFileName(self, "getOpenFileName",
  6.                                                         './',  # 文件的起始路径
  7.                                                         "All Files (*);;JSON Files (*.json)") # 设置文件类型
  8.     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.     foldername = QFileDialog.getExistingDirectory(self, "Select Directory", "./")
  6.     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.     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.         filename, _ = QFileDialog.getOpenFileName(self, "getOpenFileName",
  29.                                                          './',  # 文件的起始路径
  30.                                                          "All Files (*);;JSON Files (*.json)") # 设置文件类型
  31.         self.qlineEdit_selectfile.setText(filename)
  32.     def select_folder(self):
  33.         """选择文件夹
  34.         foldername = QFileDialog.getExistingDirectory(self, "Select Directory", "./")
  35.         self.qlineEdit_selectfolder.setText(foldername)
  36.     def open_file(self):
  37.         """使用系统的应用打开
  38.         os.startfile(self.qlineEdit_selectfile.text())
  39. if __name__ == '__main__':
  40.     app = QApplication(sys.argv)
  41.     dlg = Dialog()
  42.     dlg.show()
  43.     sys.exit(app.exec_())
  • 微信公众号
  • 关注微信公众号
  • weinxin
  • QQ群
  • 我们的QQ群号
  • weinxin

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK