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

2024-09-25 14:18:11 发布

您现在位置:Python中文网/ 问答频道 /正文

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


Tags: 文件方法应用程序区域检查用户空白pyqt5白色
1条回答
网友
1楼 · 发布于 2024-09-25 14:18:11

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

相关问题 更多 >