【问题标题】:How can I detect middle clicks on PyQt QTreeWidget?如何检测 PyQt QTreeWidget 上的中间点击?
【发布时间】:2016-04-04 22:49:43
【问题描述】:

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 是最好的。

【问题讨论】:

  • This C++ 答案可能对您有所帮助,但它基本上是按照您的建议捕获和存储鼠标状态,而不是在全局级别(它只需要在您关心的小部件中用餐)

标签: python pyqt


【解决方案1】:

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

你可以用类似的东西来做:

yourQtTreeView.mouseDoubleClickEvent = self.mymouseDoubleClickEvent

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多