PyQt5 - 无法在子类中捕获mousePressEvent

时间:2017-02-23 15:22:08

标签: python qt user-interface pyqt5

我对PyQt很陌生,并且在设置信号/插槽时遇到了问题。

我有一个QTreeView小部件,其父级是QTabWidget,它本身位于QWidget内,其节点是一个自定义对象Node,它继承了来自QWidget

我想启用点击节点,通过信号/插槽触发伴随QTableView中模型数据的更改。

此处显示的mousePressEvent()中的初始值设定项和覆盖的Node

class Node(QtWidgets.QWidget):                                               
     def __init__(self, name, parent=None):                                    
         super(Node, self).__init__(parent)                                     
         self._name = name                                                    
         self._children = []                                                    
         self._parent = parent                                                 

         if parent is not None:                                                
             parent.addChild(self)                                               

     trigger = QtCore.pyqtSignal(int, int)                                      

     def mousePressEvent(self, event):                                          
         event.accept()                                                          
         print("Node clicked!")
         self.trigger.emit() # this would have variables...

单击树中的Node项时,未捕获鼠标事件。

我确信这与我如何设置窗口小部件和/或mousePressEvent()的工作方式有关,但我一直在努力解决这一问题。

1 个答案:

答案 0 :(得分:0)

我在这里走错了路。访问用户定义的QTreeView项的正确方法是使用QModelIndex.internalPointer()方法和QAbstractItemView.clicked()信号。

例如

self.selectionTree.clicked.connect(self.get_single_return_data)

# ...

def get_single_return_data(self, index):
    print("Signal triggered", index.internalPointer())
    p = index.internalPointer()
    # do something with p