PyQt:悬停按钮时更改光标

Posted

技术标签:

【中文标题】PyQt:悬停按钮时更改光标【英文标题】:PyQt: Changing cursor when hovering a button 【发布时间】:2016-04-19 17:19:09 【问题描述】:

我正在尝试制作一个按钮(或任何其他 Qwidget),它会在悬停时更改用户光标。

例如,当我悬停 QPushButton 时,它会将光标从箭头更改为指向手。

我正在使用 Qt 样式表,所以我不完全确定,但有没有办法在那里做类似的事情?应该看起来像这样:

btn.setStyleSheet("#btn background-image: url(':/images/Button1.png'); border: none; "
"#btn:hover  change-cursor: cursor('PointingHand');  

注意:例如上面的代码,第二行将没有任何功能。


但是,如果没有,我还有其他方法可以实现吗?

【问题讨论】:

【参考方案1】:

对于任何想在 PyQt5 中实现这一点的人来说,这就是我设法做到的。假设您有一个按钮,当您将鼠标悬停在按钮上时,您希望光标变为“PointingHandCursor”。 您可以使用your_button.setCursor(QCursor(QtCore.Qt.PointingHandCursor)) 来完成。例如:

from PyQt5.QtWidgets import QWidget, QApplication, QPushButton, QLabel, QProgressBar, 
    QLineEdit, QFileDialog
from PyQt5 import QtGui, QtCore
from PyQt5.QtGui import QCursor

class Window(QWidget):
    def __init__(self):
        super().__init__()

        self.title = "your_title"

        self.screen_dim = (1600, 900)

        self.width = 650
        self.height = 400

        self.left = int(self.screen_dim[0]/2 - self.width/2)
        self.top = int(self.screen_dim[1]/2 - self.height/2)

        self.init_window()

    def init_window(self):
        self.setWindowIcon(QtGui.QIcon('path_to_icon.png'))
        self.setWindowTitle(self.title)
        self.setGeometry(self.left, self.top, self.width, self.height)
        self.setStyleSheet('background-color: rgb(52, 50, 51);')

        self.create_layout()

        self.show()

    def create_layout(self):
        self.button = QPushButton('Click Me', self)
        self.button.setCursor(QCursor(QtCore.Qt.PointingHandCursor))

if __name__ == '__main__':

    App = QApplication(sys.argv)
    window = Window()
    sys.exit(App.exec())

【讨论】:

非常好,你写了一个自包含的代码sn-p来展示功能! 不错...完美运行 欣赏展示所有必要的导入。【参考方案2】:

使用QWidget.setCursor (self, QCursor)

http://pyqt.sourceforge.net/Docs/PyQt4/qwidget.html#setCursor

http://doc.qt.io/qt-4.8/qwidget.html#cursor-prop

【讨论】:

如何将其设置为指向手形光标?我在纪录片的任何地方都找不到。 嘿,来吧,RTFM...在第二个链接上,单击“预定义光标对象列表”... btn.setCursor(QtGui.QCursor(QtCore.Qt.PointingHandCursor)),我试过了,它会打开没有任何错误,但光标只会显示一次,我需要循环这个还是什么?

以上是关于PyQt:悬停按钮时更改光标的主要内容,如果未能解决你的问题,请参考以下文章

eclipse中android悬停时按钮的Android颜色变化

CSS更改文本区域上调整大小按钮的光标样式

当鼠标悬停在控件的指定区域时如何更改鼠标光标?使用 c#

PyQt 中的悬停问题

如何更改悬停在图像上的光标[重复]

将鼠标悬停在 url RichTextBox 上时更改光标