gpt4 book ai didi

python - 如何使用 eventFilter 读取双击?

转载 作者:行者123 更新时间:2023-12-01 05:05:05 34 4
gpt4 key购买 nike

我的自定义标签上有一个 eventFilter,我想用它来嗅探双击。这可能吗?

    self.installEventFilter(self)

# Handles mouse events
def eventFilter(self, object, event):

try:
if event.buttons() == QtCore.Qt.LeftButton:

#LeftButton event

else:
# nothing is being pressed
except:
pass

最佳答案

是的,这是可能的,但由于某些奇怪的原因,事情并不那么简单。当然,您永远不知道一次单击后是否可能会紧接着另一次单击,从而有效地导致双击。这就是为什么必须有一些内置的等待时间。 Qt 执行此操作并传递双击事件 (QEvent.MouseButtonDblClick)。另一方面,即使在双击的情况下,Qt 仍然会传递单击事件 (QEvent.MouseButtonPress),但只是一次。这可能不是最好的设计。

我们必须正确区分它们。我使用一个额外的计时器来完成此操作,该计时器需要比用于检测双击的内置 Qt 计时器长一点。代码如下:

from PySide import QtCore, QtGui

class MyLabel(QtGui.QLabel):

def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.installEventFilter(self)
self.single_click_timer = QtCore.QTimer()
self.single_click_timer.setInterval(200)
self.single_click_timer.timeout.connect(self.single_click)

def single_click(self):
self.single_click_timer.stop()
print('timeout, must be single click')

def eventFilter(self, object, event):
if event.type() == QtCore.QEvent.MouseButtonPress:
self.single_click_timer.start()
return True
elif event.type() == QtCore.QEvent.MouseButtonDblClick:
self.single_click_timer.stop()
print('double click')
return True

return False


app = QtGui.QApplication([])

window = MyLabel('Click me')
window.resize(200, 200)
window.show()

app.exec_()

另请参阅Distinguish between single and double click events in Qt .

关于python - 如何使用 eventFilter 读取双击?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25206464/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com