如果你想保持當鼠標進入軌道或離開窗口小部件,你可以使用這樣的事情:
#!/usr/bin/env python
#-*- coding:utf-8 -*-
from PyQt4 import QtCore, QtGui
class mainwindow(QtGui.QWidget):
def __init__(self, parent=None):
super(mainwindow, self).__init__(parent)
def enterEvent(self, event):
print "Mouse Entered"
return super(mainwindow, self).enterEvent(event)
def leaveEvent(self, event):
print "Mouse Left"
return super(mainwindow, self).enterEvent(event)
if __name__ == "__main__":
import sys
app = QtGui.QApplication(sys.argv)
main = mainwindow()
main.show()
sys.exit(app.exec_())
如果你只是想檢查鼠標是否在窗口小部件,你可以使用的QWidget::underMouse()
功能:
#!/usr/bin/env python
#-*- coding:utf-8 -*-
from PyQt4 import QtCore, QtGui
class mainwindow(QtGui.QWidget):
def __init__(self, parent=None):
super(mainwindow, self).__init__(parent)
self.button = QtGui.QPushButton("Check Mouse in 3 seconds")
self.button.clicked.connect(self.on_button_clicked)
self.layout = QtGui.QHBoxLayout(self)
self.layout.addWidget(self.button)
def mouseReleaseEvent(self, event):
if self.underMouse():
print "Do something"
return super(mainwindow, self).mouseReleaseEvent(event)
@QtCore.pyqtSlot()
def on_button_clicked(self):
QtCore.QTimer.singleShot(3000, self.checkMouse)
def checkMouse(self):
print "Under Mouse: {0}".format(self.underMouse())
if __name__ == "__main__":
import sys
app = QtGui.QApplication(sys.argv)
main = mainwindow()
main.show()
sys.exit(app.exec_())
的另一種方法將涉及檢查所述鼠標的位置是小部件的內部幾何形狀內:
#!/usr/bin/env python
#-*- coding:utf-8 -*-
from PyQt4 import QtCore, QtGui
class mainwindow(QtGui.QWidget):
def __init__(self, parent=None):
super(mainwindow, self).__init__(parent)
self.setMouseTracking(True)
def mouseReleaseEvent(self, event):
posMouse = event.pos()
if self.rect().contains(posMouse):
print "Under Mouse"
return super(mainwindow, self).mouseReleaseEvent(event)
if __name__ == "__main__":
import sys
app = QtGui.QApplication(sys.argv)
main = mainwindow()
main.show()
main.resize(200, 200)
sys.exit(app.exec_())
你能否提供一些更多的代碼,最好有一個完整的示例這說明您的問題?如果你重寫一個小部件的事件方法,它們會隱式調用'this'小部件,除非你抓住鼠標。 –
你好安德烈亞斯。如果您單擊一個小部件,請關閉鼠標,但在釋放鼠標時將光標拖動到遠離** this **的另一個小部件,mouseReleaseEvent仍會被觸發。我需要在發佈時知道遊標是否在小部件上。我怎樣才能做到這一點? – Phil