PyQt 文件夹树上的 MouseClick 事件

MouseClick Event on PyQt Folder Tree

我已经使用 PyQt5 编写了一个小应用程序。该应用程序提供了计算机中所有文件夹的树视图以及用户可以在其中键入内容的 lineEditd:

import sys
from PyQt5.QtWidgets import (
    QMainWindow, QApplication,
    QHBoxLayout,QWidget,
     QVBoxLayout,QFileSystemModel, QTreeView, QLineEdit
)

class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        layout = QHBoxLayout()
        application = App()
        layout.addWidget(application)
        widget = QWidget()
        widget.setLayout(layout)
        self.setCentralWidget(widget)
    
        

class App(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()
    
    def initUI(self):
        self.model = QFileSystemModel()
        self.model.setNameFilters([''])
        self.model.setNameFilterDisables(0)
        self.model.setRootPath('')
        self.tree = QTreeView()
        self.tree.setModel(self.model)
        
        self.tree.setAnimated(False)
        self.tree.setSortingEnabled(True)
        layout = QVBoxLayout()
        layout.addWidget(self.tree)
        self.input = QLineEdit()
        layout.addWidget(self.input)
        self.setLayout(layout)
        self.show()

app = QApplication(sys.argv)
w = MainWindow()
w.show()
app.exec()

我的下一个目标是让我的应用程序能够检测鼠标在树形图上的点击。更准确地说,如果鼠标单击树中的任何文件夹,我想知道用户单击的文件夹的目录(例如,我可以通过用目录填充它来更新 LineEdit)

要达到这样的目的,我首先要做的就是让鼠标在树上的点击成为一个事件。如果我添加如下方法:

def mouseMoveEvent(self, e):
    #some code

它不会给我一个反映鼠标点击发生在树中这一事实的事件。因此,我什至坚持让鼠标在树中单击成为一个事件,更不用说阅读目录了。

编辑:

通过写作

self.tree.clicked

我能够检测到树中的任何点击。但是,我还是不知道如何获取目录。

如果您想使用视图的点击信号获取目录,那么您应该使用模型:

self.tree.clicked.connect(self.handle_clicked)
def handle_clicked(self, index):
    filename = self.model.fileName(index)
    path = self.model.filePath(index)
    fileinfo = self.model.fileInfo(index)
    print(filename, path, fileinfo)