[英]Multiple files and folder selection in QFileDialog (Revisited)
这个问题已经存在here ,但答案似乎已经过时或从 Python 2.7 开始不再有效。
当我使用此代码对 QFileDialog 进行子类化时,会调用 FileDialog 类 init,但从未调用过 openClicked 方法。
class FileDialog(QtGui.QFileDialog):
def __init__(self, *args):
QtGui.QFileDialog.__init__(self, *args)
self.setOption(self.DontUseNativeDialog, True)
self.setFileMode(self.ExistingFiles)
btns = self.findChildren(QtGui.QPushButton)
self.openBtn = [x for x in btns if 'open' in str(x.text()).lower()][0]
self.openBtn.clicked.disconnect()
self.openBtn.clicked.connect(self.openClicked)
self.tree = self.findChild(QtGui.QTreeView)
def openClicked(self):
inds = self.tree.selectionModel().selectedIndexes()
files = []
for i in inds:
if i.column() == 0:
files.append(os.path.join(str(self.directory().absolutePath()),str(i.data().toString())))
self.selectedFiles = files
self.hide()
def filesSelected(self):
return self.selectedFiles
这是对 FileDialog 的正确调用吗?
mydialog = FileDialog()
filelist = mydialog.getExistingDirectory(self, "Select Stuff", "", QtGui.QFileDialog.DontConfirmOverwrite)
另一个问题的解决方案不必要地复杂。 您需要做的就是覆盖QFileDialog.accept()
,然后您就可以自由地实现您喜欢的任何行为。
下面的例子非常小。 它不会对所选文件进行任何检查(例如查看它们是否仍然存在),但如果需要,可以轻松添加。
from PyQt4 import QtCore, QtGui
class FileDialog(QtGui.QFileDialog):
def __init__(self, *args, **kwargs):
super(FileDialog, self).__init__(*args, **kwargs)
self.setOption(QtGui.QFileDialog.DontUseNativeDialog, True)
self.setFileMode(QtGui.QFileDialog.ExistingFiles)
def accept(self):
super(FileDialog, self).accept()
class Window(QtGui.QWidget):
def __init__(self):
super(Window, self).__init__()
self.button = QtGui.QPushButton('Test', self)
self.button.clicked.connect(self.handleButton)
layout = QtGui.QVBoxLayout(self)
layout.addWidget(self.button)
def handleButton(self):
dialog = FileDialog()
if dialog.exec_() == QtGui.QDialog.Accepted:
print(dialog.selectedFiles())
if __name__ == '__main__':
import sys
app = QtGui.QApplication(sys.argv)
window = Window()
window.show()
sys.exit(app.exec_())
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.