Python版本3.7
PySide2 Version: 5.14.1
官方文档:http://doc.qt.io/qtforpython/index.html
from PySide2.QtWidgets import QWidget, QPushButton, QVBoxLayout, QFileDialog, QApplication, QLineEdit
from PySide2.QtCore import Signal, Slot
class MyWidget(QWidget):
def __init__(self, parent=None):
super().__init__(parent)
self.btn_dialog = QPushButton('打开文件')
self.btn_dialog.clicked.connect(self.openFileDialog)
self.line_edit = QLineEdit()
self.layout = QVBoxLayout()
self.layout.addWidget(self.btn_dialog)
self.layout.addWidget(self.line_edit)
self.setLayout(self.layout)
@Slot()
def openFileDialog(self):
# 生成文件对话框对象
dialog = QFileDialog()
# 设置文件过滤器,这里是任何文件,包括目录噢
dialog.setFileMode(QFileDialog.AnyFile)
# 设置显示文件的模式,这里是详细模式
dialog.setViewMode(QFileDialog.Detail)
if dialog.exec_():
fileNames = dialog.selectedFiles()
self.line_edit.setText(fileNames[0])
app = QApplication()
widget = MyWidget()
widget.show()
app.exec_()
运行截图:
在Mac系统下,打开文件的时候,可能会出现如下报错信息:
objc[17245]: Class FIFinderSyncExtensionHost is implemented in both /System/Library/PrivateFrameworks/FinderKit.framework/Versions/A/FinderKit (0x7fff9a23b3c8) and /System/Library/PrivateFrameworks/FileProvider.framework/OverrideBundles/FinderSyncCollaborationFileProviderOverride.bundle/Contents/MacOS/FinderSyncCollaborationFileProviderOverride (0x132cfbf50). One of the two will be used. Which one is undefined.
我从网上搜索得知,出现红色的报错好像是苹果系统的锅。嗯,暂时就这样认为吧。
代码分析:
dialog = QFileDialog()
生成一个文件对话框对象, 当然也可以通过QFileDialog
类的静态方法来直接显示一个文件对话框,具体查看官方手册。
dialog.setFileMode(QFileDialog.AnyFile)
设置文件打开的模式,这里设置为任何文件,包括目录,但是一次只能选择一个文件,如果想选择多个文件,就要设置为QFileDialog.ExistingFiles
,如果只想让用户选择目录,不能选择文件就设置为QFileDialog.Directory
dialog.setViewMode(QFileDialog.Detail)
设置显示的模式,这里是详细模式,包括图像,名字和每一项的详细信息,也可以设置QFileDialog.List
,这里就只包括图像和名字了
if dialog.exec_():
fileNames = dialog.selectedFiles()
self.line_edit.setText(fileNames[0])
当对话框关闭后,获取用户选择的文件和路径,并显示在line_edit控件上面
dialog.selectedFiles()
会返回一个列表,里面包含了用户选择的文件的绝对路径。
友情链接:
QFileDialog
QLineEdit