问题
I am a newbie to python i want that if i move my mouse over the label with text stop on it then it should change the value of a variable Stop to True so that i may pause/Stop ,my program. i have looked the code at Mouseover event filter for a PyQT Label and tried to run it but nothing is being shown up Please guide me... the code is as under
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *
from PyQt5 import *
import sys
class mouseoverEvent(QtCore.QObject):
def __init__(self, parent):
super(mouseoverEvent, self).__init__(parent)
self.initUI()
def eventFilter(self, object, event):
if event.type() == QtCore.QEvent.MouseMove:
print( "mousemove!")
return True
else:
return False
def initUI(self):
self.filter = mouseoverEvent(self)
self.label.installEventFilter(self.filter)
self.lbl=QLabel(self)
self.lbl.setText(self,"hellojjj")
self.setGeometry(1000, 30, 300, 100)
self.setWindowTitle('QLineEdit')
self.show()
'''if __name__ == '__main__':
app = QApplication(sys.argv)
ex = mouseoverEvent()
sys.exit(app.exec_())'''''
I Shall be greatly thankful...
回答1:
If you've already imported
from PyQt5.QtWidgets import * from PyQt5.QtGui import * from PyQt5.QtCore import *
there is no need to
from PyQt5 import *
Once you've imported QtCore, you no longer need to call its functions/classes with 'QtCore.QEvent', Just using QEvent is fine
I believe the question you linked to used PyQt4. In PyQt5, the initialization procedure for the class changed
The code below should work.
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *
import sys
class mouseoverEvent(QWidget):
def __init__(self):
super().__init__()
self.stop = False # your 'stop' variable
self.initUI()
def initUI(self):
self.lbl=QLabel(self)
self.lbl.setText("Hover over me to stop the program")
self.lbl.installEventFilter(self)
self.setGeometry(1000, 30, 300, 100)
self.setWindowTitle('QLineEdit')
self.show()
def eventFilter(self, object, event):
if event.type() == QEvent.Enter:
print("Mouse is over the label")
self.stop = True
print('program stop is', self.stop)
return True
elif event.type() == QEvent.Leave:
print("Mouse is not over the label")
self.stop = False
print('program stop is', self.stop)
return False
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = mouseoverEvent()
sys.exit(app.exec_())
if you only want the stop to activate over a label with certain text change your eventFilter function to:
def eventFilter(self, object, event):
if hasattr(object, 'text'): #check to see if the object has text, otherwise if you hover over something without text, PyQt will return an error
if object.text() == "Hover over me to stop the program":
if event.type() == QEvent.Enter:
print("Mouse is over the label")
self.stop = True
print('program stop is', self.stop)
return True
elif event.type() == QEvent.Leave:
print("Mouse is not over the label")
self.stop = False
print('program stop is', self.stop)
return False
回答2:
Please find the reference:
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *
class Label(QLabel):
def __init__(self, *args, **kwargs):
QLabel.__init__(self, *args, **kwargs)
def enterEvent(self, event):
print("hovered")
def leaveEvent(self, event):
print("left")
来源:https://stackoverflow.com/questions/51456403/mouseover-event-for-a-pyqt5-label