如何在PyQt QTreeWidget上检测中间点击?

时间:2016-04-04 22:49:43

标签: python pyqt

itemClicked / itemDoubleClicked信号似乎无法区分鼠标左键和中键。我想根据点击的内容做不同的事情。似乎点击发生在发布上,所以app.mouseButtons()在实际调用itemClicked()时报告NoButtons。

虽然我还没有尝试过,但我假设我可以做一些主要的应用程序鼠标测试来全局存储状态,然后从我的itemClicked()读取它,但这感觉真的很复杂和hacky,有没有更好的方法找不到?

[更新]按照建议,我覆盖了树的鼠标事件。我也不想为此专门为QTreeWidget创建子类,所以为了完整起见,这就是我所做的:

setattr(self.tree, 'middleMouse', False)

def mousePressEvent(self, event):
    self.middleMouse = event.button() == QtCore.Qt.MidButton
    return QtGui.QTreeWidget.mousePressEvent(self, event)

self.tree.mousePressEvent = types.MethodType(mousePressEvent, self.tree)

def itemClicked(item):
    if self.tree.middleMouse:
        <do something>
    else:
        <do another thing>

self.tree.itemClicked.connect(itemClicked)

Python是最好的。

1 个答案:

答案 0 :(得分:1)

我看到的唯一方法是重新实现QTreeWidget的mouseDoubleClickEvent(QMouseEvent *事件),并根据触发事件的按钮更改行为。

你能用以下的东西做什么:

yourQtTreeView.mouseDoubleClickEvent = self.mymouseDoubleClickEvent

def mymouseDoubleClickEvent(event):
    #your code capturing the event

我没有对此进行测试,但我认为这是方向。