java mousemove_当光标在按钮上时,mouseMoveEvent()

如果您想要检测鼠标的位置,即使鼠标位于孩子的顶部,可能的选择是使用事件过滤器 .

from PyQt5 import QtCore, QtGui, QtWidgets

class Widget(QtWidgets.QWidget):

def __init__(self, parent=None):

super(Widget, self).__init__(parent)

w_ = QtWidgets.QWidget()

lay_w = QtWidgets.QHBoxLayout(w_)

for c in (QtWidgets.QPushButton(), QtWidgets.QLineEdit()):

lay_w.addWidget(c)

lay = QtWidgets.QVBoxLayout(self)

for w in (QtWidgets.QPushButton(), QtWidgets.QLineEdit(), QtWidgets.QTextEdit(), w_):

lay.addWidget(w)

for ws in self.findChildren(QtWidgets.QWidget) + [self]:

ws.setMouseTracking(True)

ws.installEventFilter(self)

def eventFilter(self, obj, event):

if event.type() == QtCore.QEvent.MouseMove:

p_respect_to_window = self.mapFromGlobal(obj.mapToGlobal(event.pos()))

print(p_respect_to_window)

return super(Widget, self).eventFilter(obj, event)

if __name__ == '__main__':

import sys

app = QtWidgets.QApplication(sys.argv)

w = Widget()

w.show()

sys.exit(app.exec_())

另一方面,如果您只想在一种类型的自定义窗口小部件中执行此操作,则最好覆盖自定义窗口小部件的mouseMoveEvent方法:

from PyQt5 import QtCore, QtGui, QtWidgets

class ClickButton(QtWidgets.QPushButton):

def __init__(self, text, parent=None):

super(ClickButton, self).__init__(text=text, parent=parent)

self.setMouseTracking(True)

def mouseMoveEvent(self, event):

self.run()

super(ClickButton, self).mouseMoveEvent(event)

def run(self):

print("call to run function in button{} and time: {}".format(self.text(),

QtCore.QDateTime.currentDateTime().toString()))

class Widget(QtWidgets.QWidget):

def __init__(self, parent=None):

super(Widget, self).__init__(parent)

lay = QtWidgets.QVBoxLayout(self)

for i in range(10):

w = ClickButton(str(i), self)

lay.addWidget(w)

if __name__ == '__main__':

import sys

app = QtWidgets.QApplication(sys.argv)

w = Widget()

w.show()

sys.exit(app.exec_())

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值