PyQt 中的悬停问题

Posted

技术标签:

【中文标题】PyQt 中的悬停问题【英文标题】:Hover issue in PyQt 【发布时间】:2012-03-12 03:52:43 【问题描述】:

我想做悬停。我看到了一个示例,然后编写了一个脚本,该脚本将在我制作程序时使用。我面临一个问题,只有当您将鼠标放在按钮的左角时才会发生悬停。我希望所有按钮都会发生这种情况,如果我将光标移动到按钮上,那么它应该会改变。

这是我的代码:

from PyQt4 import QtGui, QtCore
from PyQt4.QtCore import pyqtSignal
import os,sys

class HoverButton(QtGui.QToolButton):
    def enterEvent(self,event):
        print("Enter")
        button.setStyleSheet("background-color:#45b545;")

    def leaveEvent(self,event):
        button.setStyleSheet("background-color:yellow;")
        print("Leave")

app = QtGui.QApplication(sys.argv)
widget = QtGui.QWidget()
button = QtGui.QToolButton(widget)
button.setMouseTracking(True)
buttonss =  HoverButton(button)
button.setIconSize(QtCore.QSize(200,200))
widget.show()
sys.exit(app.exec_())

【问题讨论】:

【参考方案1】:

这就是你要找的东西

from PyQt4 import QtGui, QtCore
from PyQt4.QtCore import pyqtSignal
import os,sys


class Main(QtGui.QWidget):

    def __init__(self, parent=None):
        super(Main, self).__init__(parent)

        layout = QtGui.QVBoxLayout(self) # layout of main widget

        button =  HoverButton(self) 
        button.setIconSize(QtCore.QSize(200,200))

        layout.addWidget(button) # set your button to the widgets layout
                                 # this will size the button nicely


class HoverButton(QtGui.QToolButton):

    def __init__(self, parent=None):
        super(HoverButton, self).__init__(parent)
        self.setMouseTracking(True)

    def enterEvent(self,event):
        print("Enter")
        self.setStyleSheet("background-color:#45b545;")

    def leaveEvent(self,event):
        self.setStyleSheet("background-color:yellow;")
        print("Leave")

app = QtGui.QApplication(sys.argv)
main = Main()
main.show()
sys.exit(app.exec_())

在您的代码中,您在按钮中有一个按钮,并且嵌套按钮未分配给 QLayout 小部件。虽然,我不确定您为什么要在按钮内添加按钮。我从使用 GUI 中学到的一件事是,如果您将代码模块化,它会容易得多。现在您可以使用这个自定义按钮并将其应用到其他地方。

【讨论】:

谢谢杰夫,这正是我要找的,非常感谢【参考方案2】:

你应该使用样式表

QToolButton:hover

        background-color: rgb(175,175,175);

【讨论】:

【参考方案3】:

您可能需要focusblur,而不是enterleave 只会在鼠标实际进入或离开按钮边界时触发,并且可能只是短暂的脉冲而不是切换。 focusblur 将随着悬停切换。

【讨论】:

我想在鼠标点击时更改按钮的颜色 您可以通过使用 QSS 样式表并为 :hover 属性应用不同的样式来更轻松地完成此操作。查看developer.qt.nokia.com/doc/qt-4.8/stylesheet.html 和developer.qt.nokia.com/doc/qt-4.8/stylesheet-reference.html 感谢您的回复,但我如何使用我尝试过的 .setStyleSheet("hover:blue;") 但它对我不起作用

以上是关于PyQt 中的悬停问题的主要内容,如果未能解决你的问题,请参考以下文章

带有 Svg 图像的 pyQt 悬停事件

PyQt:按钮悬停描述

PyQt:悬停按钮时更改光标

在 pyqt5 中包含带有悬停标签的 matplotlib

有没有办法用 PyQt5 捕捉按钮上的悬停事件信号? [复制]

节点悬停效果