在 Qtreeview 中按下空白区域时清除文件选择

clear file selection when press on blank area in Qtreeview

我在我的应用程序 (Pyqt5) 中使用 QFileSystemModel 和 QTreeView。我正在寻找一种方法,当按下白色空白区域时我可以清除文件选择...更具体地说,我需要一种方法来知道如何检查用户是否按下空白区域以便不选择任何文件.

您必须使用事件过滤器检测点击,然后确定是否关联了有效的 QModelIndex,如果是空白区域,则它不与 QModelIndex 关联:

import os
import sys

from PyQt5 import QtCore, QtGui, QtWidgets


CURRENT_DIR = os.path.dirname(os.path.realpath(__file__))


class MainWindow(QtWidgets.QMainWindow):
    def __init__(self, parent=None):
        super(MainWindow, self).__init__(parent)

        self.model = QtWidgets.QFileSystemModel(self)
        self.view = QtWidgets.QTreeView()
        self.setCentralWidget(self.view)
        self.view.setModel(self.model)

        self.view.viewport().installEventFilter(self)

        path = CURRENT_DIR

        self.model.setRootPath(path)
        self.view.setRootIndex(self.model.index(path))

    def eventFilter(self, obj, event):
        if (
            obj is self.view.viewport()
            and event.type() == QtCore.QEvent.MouseButtonDblClick
        ):
            ix = self.view.indexAt(event.pos())
            if not ix.isValid():
                print("empty area")
                self.view.clearSelection()
        return super(MainWindow, self).eventFilter(obj, event)


if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)
    w = MainWindow()
    w.show()
    sys.exit(app.exec_())