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

时间:2020-04-03 17:59:07

标签: python pyqt5

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

1 个答案:

答案 0 :(得分:1)

您必须使用事件过滤器检测点击,然后确定是否关联了有效的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_())