PyQt5按钮悬停函数调用



当鼠标悬停在按钮上时,我想调用一个函数。我基本上没有办法使用QPushButton:悬停,因为我想调用的函数非常复杂,与按钮没有太多关系。这是一个示例代码。

import sys
from PyQt5 import QtWidgets
from PyQt5.QtWidgets import QApplication, QLabel, QPushButton, QWidget
# ----------------------------------------------------
def firstText(myLabel):
myLabel.setText("Wassup yall?")

def secondText(myLabel):
myLabel.setText("Initial Text")
# ----------------------------------------------------
app = QApplication(sys.argv)
window = QWidget()
window.setWindowTitle("Wassup?")
window.setFixedWidth(1000)
window.setFixedHeight(600)
window.move(100, 50)

window.setStyleSheet(
"background-color: rgb(208, 208, 208);"
)

button = QtWidgets.QPushButton(window)
button.setGeometry(100, 50, 120, 60)
button.setStyleSheet(
"QPushButton {"
"border: 0px solid;"
"background-color: rgb(255, 50, 50);"
"}"
)

label = QtWidgets.QLabel(window)
label.setGeometry(100, 120, 120, 60)
label.setStyleSheet(
"background-color: rgb(128, 255, 64);"
)
label.setText("Initial Text")

window.show()
sys.exit(app.exec())

因此,当我将鼠标悬停在按钮上时,我希望调用函数"firstText",而当我离开鼠标时,调用函数"secondText"。

一种可能的解决方案是覆盖enterEvent和leaveEvent方法:

import sys
from PyQt5.QtCore import pyqtSignal
from PyQt5.QtWidgets import QApplication, QLabel, QPushButton, QWidget

class Button(QPushButton):
entered = pyqtSignal()
leaved = pyqtSignal()
def enterEvent(self, event):
super().enterEvent(event)
self.entered.emit()
def leaveEvent(self, event):
super().leaveEvent(event)
self.leaved.emit()

class Widget(QWidget):
def __init__(self, parent=None):
super().__init__()
self.setWindowTitle("Wassup?")
self.setFixedSize(1000, 600)
self.move(100, 50)
self.setStyleSheet("background-color: rgb(208, 208, 208);")
button = Button(self)
button.setGeometry(100, 50, 120, 60)
button.setStyleSheet(
"QPushButton {"
"border: 0px solid;"
"background-color: rgb(255, 50, 50);"
"}"
)
self.label = QLabel(self)
self.label.setGeometry(100, 120, 120, 60)
self.label.setStyleSheet("background-color: rgb(128, 255, 64);")
self.label.setText("Initial Text")
button.entered.connect(self.handle_entered)
button.leaved.connect(self.handle_leaved)
def handle_entered(self):
self.label.setText("Wassup yall?")
def handle_leaved(self):
self.label.setText("Initial Text")

app = QApplication(sys.argv)
window = Widget()
window.show()
sys.exit(app.exec())

最新更新