python,PyQt4 - 使用Enter键在QTreeView中获取文件夹路径

时间:2017-07-31 06:49:50

标签: python pyqt

我正在使用此代码获取QTreeView上的文件夹(或文件)路径。

self.mytreeview.clicked.connect(self.mytreeview_clicked)

但我想用键盘控制所有东西,所以我想使用EnterKey而不是点击。我做谷歌但无法找到任何解决方案或示例。我该怎么办?

这是我的代码:

self.btn_myrootPath = QPushButton("Select Root Folder")
self.btn_myrootPath.clicked.connect(self.set_myrootPath)
self.myfsm = QFileSystemModel(self)
self.myfsm.setRootPath(self.myrootPath)
self.myfsm.setReadOnly(True)
self.myfsm.setFilter(QDir.AllDirs | QDir.NoDotAndDotDot)

self.myrootPath_l = QLabel()
self.myrootPath_l.setText(self.myrootPath)

self.mytreeview = QTreeView(self)
self.mytreeview.setModel(self.myfsm)
self.mytreeview.setRootIndex(self.myfsm.index(self.myfsm.rootPath()))
self.mytreeview.clicked.connect(self.mytreeview_clicked)
self.mytreeview.setColumnHidden(1, True)
self.mytreeview.setColumnHidden(2, True)
self.mytreeview.setColumnWidth(0, 800)

这是mytreeview_clicked函数:

def mytreeview_clicked(self, index):
    indexItem = self.myfsm.index(index.row(), 0, index.parent())
    path = str(self.myfsm.filePath(indexItem))
    ......

----------------- EDIT --------------------

我找到了答案。 只是改变

self.mytreeview.clicked.connect(self.mytreeview_clicked)

self.mytreeview.activated.connect(self.mytreeview_clicked)

当双击或按EnterKey时,此代码调用函数self.mytreeview_clicked

1 个答案:

答案 0 :(得分:0)

您可以创建自定义信号而不是点击的事件。

class MyWidget(QtGui.QWidget): #Your classname
    keyPressed = QtCore.pyqtSignal()

    def keyPressEvent(self, event):
        super(MyWidget, self).keyPressEvent(event)
        self.keyPressed.emit()
...

这样你就可以使用

self.mytreeview.keyPressed.connect(self.mytreeview_clicked)

而不是

self.mytreeview.clicked.connect(self.mytreeview_clicked)

另外,您可以使用不同的Signal处理每个keyPressEvent并处理其发射。

def keyPressEvent(self, event):
    if type(event) == QtGui.QKeyEvent:
        if event.key() == QtCore.Qt.Key_Space:
            self.emit(QtCore.SIGNAL('MYSIGNAL'))