[英]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.