我正在使用此代码获取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
。
答案 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'))