PyQt5 - 无法在子类中捕获 mousePressEvent
Posted
技术标签:
【中文标题】PyQt5 - 无法在子类中捕获 mousePressEvent【英文标题】:PyQt5 - Unable to capture mousePressEvent in subclass 【发布时间】:2017-02-23 15:22:07 【问题描述】:我是 PyQt 的新手,在设置信号/插槽时遇到问题。
我有一个QTreeView
小部件,它的父小部件是QTabWidget
,它本身位于QWidget
内,其节点是一个自定义对象Node
,它继承自QWidget
。
我想启用对节点的点击,以触发 - 通过信号/插槽 - 伴随 QTableView
中的模型数据发生变化。
此处显示Node
中的初始化程序和覆盖mousePressEvent()
:
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】:我在这里走错了路。访问用户定义的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
【讨论】:
以上是关于PyQt5 - 无法在子类中捕获 mousePressEvent的主要内容,如果未能解决你的问题,请参考以下文章
PyQt5:添加lineEdit的子类QSlider(用于在QtDesigner中提升)?