【问题标题】:PyQt5 PushButton Hover Function CallPyQt5 PushButton Hover 函数调用
【发布时间】:2021-07-05 23:36:16
【问题描述】:

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

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”。

【问题讨论】:

    标签: python user-interface pyqt5 hover


    【解决方案1】:

    一种可能的解决方案是覆盖 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())
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-07-16
      • 1970-01-01
      • 2012-10-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-05
      相关资源
      最近更新 更多