1、前言
在学习Pyqt5过程中,遇到了想通过按钮等控件打开文件夹,类似于下面(图1)的 '打开文件夹一样' 的效果
(图1)
本来以为PyQt5 会有类似于QFileDialog 的文件对话框进行文件夹打开浏览,但并没有发现。
在进一步查找资料发现可以通过Python 中内置os 模块库可以达到打开文件夹要求。
2、pyqt5实现打开文件夹
首先在D盘新建一个用于测试的文件夹(我的如下面 图2)
(图2)
下面直接放代码,创建py文件直接复制即可使用。
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'openfoldertest.ui'
#
# Created by: PyQt5 UI code generator 5.13.0
#
# WARNING! All changes made in this file will be lost!
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_Form(object):
def setupUi(self, Form):
Form.setObjectName("Form")
Form.resize(320, 240)
self.pushButton = QtWidgets.QPushButton(Form)
self.pushButton.setGeometry(QtCore.QRect(80, 80, 111, 31))
self.pushButton.setObjectName("pushButton")
self.retranslateUi(Form)
#点击按钮信号传送到打开文件夹函数
self.pushButton.clicked.connect(self.openfolder)
QtCore.QMetaObject.connectSlotsByName(Form)
def retranslateUi(self, Form):
_translate = QtCore.QCoreApplication.translate
Form.setWindowTitle(_translate("Form", "Form"))
self.pushButton.setText(_translate("Form", "打开文件夹"))
def openfolder(self,Form):
'''打开系统文件资源管理器的对应文件夹'''
import os
folder = r'D:\aatest'
#方法1:通过start explorer
os.system("start explorer %s" %folder)
# 方法2:通过startfile
os.startfile(folder)
if __name__ == "__main__":
import sys
QtCore.QCoreApplication.setAttribute(QtCore.Qt.AA_EnableHighDpiScaling)# 适配2k等高分辨率屏幕,低分辨率屏幕可除去
app = QtWidgets.QApplication(sys.argv)
Form = QtWidgets.QWidget()
ui = Ui_Form()
ui.setupUi(Form)
Form.show()
sys.exit(app.exec_())
运行点击‘打开文件夹按钮’结果如下面图3
(图3)
3、分析与说明
如上面代码,我用了两种方法打开文件夹,所以会弹出两个文件软件窗口。在实际使用选其一即可。比较推荐方法2。
方法1:
#方法1:通过start explorer
os.system("start explorer %s" %folder)
方法2:
# 方法2:通过startfile
os.startfile(folder)