gpt4 book ai didi

python - QWidget::mouseMoveEvent 在光标悬停在子部件上时不触发

转载 作者:太空狗 更新时间:2023-10-29 21:24:13 25 4
gpt4 key购买 nike

我试图通过重新实现 QWidget::mouseMoveEvent()QWidget 中移动鼠标时捕获光标坐标。启用鼠标跟踪后,当我在主小部件周围移动光标时会生成鼠标移动事件。然而,当光标放在子部件上时,鼠标移动事件停止触发。

鼠标按下/释放事件在光标位于同一个子部件上时起作用,如果按住鼠标按钮则移动事件正确触发。我也尝试过对 child 启用鼠标跟踪,但似乎没有什么区别。 当鼠标悬停在子控件上时,如何触发鼠标移动事件?

这是一个演示问题的最小工作示例:

import sys
from PyQt4 import QtCore, QtGui

class MyWindow(QtGui.QWidget) :
def __init__(self):
QtGui.QWidget.__init__(self)
tabs = QtGui.QTabWidget()
tab1 = QtGui.QWidget()
tab2 = QtGui.QWidget()
tabs.addTab(tab1, "Tab 1")
tabs.addTab(tab2, "Tab 2")
layout = QtGui.QVBoxLayout()
layout.addWidget(tabs)
self.setLayout(layout)
self.setMouseTracking(True)

def mouseMoveEvent(self, event):
print 'mouseMoveEvent: x=%d, y=%d' % (event.x(), event.y())


app = QtGui.QApplication(sys.argv)
window = MyWindow()
window.setFixedSize(640, 480)
window.show()
sys.exit(app.exec_())

当鼠标移出 QTabWidget 时,鼠标坐标会按预期打印。除非按住鼠标按钮,否则它内部不会发生任何事情。

最佳答案

您的代码存在的问题是您需要明确地为所有小部件启用鼠标跟踪。您可以通过遍历主小部件的所有子项并为每个子项调用 setMouseTracking(True) 来完成此操作。在这里,我重写了 setMouseTracking() 来做到这一点:

import sys
from PyQt4 import QtCore, QtGui

class MyWindow(QtGui.QWidget) :
def __init__(self):
QtGui.QWidget.__init__(self)
tabs = QtGui.QTabWidget()
tab1 = QtGui.QWidget()
tab2 = QtGui.QWidget()
tabs.addTab(tab1, "Tab 1")
tabs.addTab(tab2, "Tab 2")
layout = QtGui.QVBoxLayout()
layout.addWidget(tabs)
self.setLayout(layout)
self.setMouseTracking(True)

def setMouseTracking(self, flag):
def recursive_set(parent):
for child in parent.findChildren(QtCore.QObject):
try:
child.setMouseTracking(flag)
except:
pass
recursive_set(child)
QtGui.QWidget.setMouseTracking(self, flag)
recursive_set(self)

def mouseMoveEvent(self, event):
print 'mouseMoveEvent: x=%d, y=%d' % (event.x(), event.y())


app = QtGui.QApplication(sys.argv)
window = MyWindow()
window.setFixedSize(640, 480)
window.show()
sys.exit(app.exec_())

关于python - QWidget::mouseMoveEvent 在光标悬停在子部件上时不触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25368295/

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