首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在使用QShortcut时更改按钮的动画?

如何在使用QShortcut时更改按钮的动画?
EN

Stack Overflow用户
提问于 2019-08-27 05:32:17
回答 1查看 216关注 0票数 0

在此之前,我习惯于使用button.clicked.connect(function)触发按钮并通过setStyleSheet()设置qss (例如:QPushButton:pressed{background:#EAEAEA;})。当按下按钮时,该按钮将改变背景色,点击鼠标并按预期的方式工作。但是,目前我使用QShortcut来触发按钮(例如:QtCore.Qt.Key_Return),但是该按钮似乎不受qss的影响。

我用过的代码:

代码语言:javascript
复制
from PyQt5 import QtCore, QtGui, QtWidgets


class Ui_Form(object):
    def setupUi(self, Form):
        Form.setObjectName("Form")
        Form.resize(400, 300)
        Form.setStyleSheet(""
                        "#Form {\n"
                        "background-color: rgb(255, 255, 255);\n"
                        "}\n"
                        "QPushButton:hover {\n"
                        "color: white;\n"
                        "background-color: rgb(255, 85, 127);\n"
                        "border-radius: 6px;\n"
                        "font-size:16px;\n"
                        "}\n"
                        "\n"
                        " QPushButton:pressed{\n"
                        "background:#EAEAEA;\n"
                        "color: black;\n"
                        "font-size:16px;\n"
                        "}")
        self.frame = QtWidgets.QFrame(Form)
        self.frame.setGeometry(QtCore.QRect(20, 20, 351, 241))
        self.frame.setFrameShape(QtWidgets.QFrame.StyledPanel)
        self.frame.setFrameShadow(QtWidgets.QFrame.Raised)
        self.frame.setObjectName("frame")
        self.pushButton = QtWidgets.QPushButton(self.frame)
        self.pushButton.setGeometry(QtCore.QRect(130, 100, 93, 28))
        self.pushButton.setObjectName("pushButton")

        # old (be affected by qss (QPushButton:pressed) when clicking mouse)
        # self.pushButton.clicked.connect(self.send_message)

        # new (not to be affected by qss (QPushButton:pressed) when using Enter key)
        send_message_shortcut = QtWidgets.QShortcut(QtGui.QKeySequence(QtCore.Qt.Key_Return), Form)
        send_message_shortcut.activated.connect(self.send_message)

        self.retranslateUi(Form)
        QtCore.QMetaObject.connectSlotsByName(Form)

    def retranslateUi(self, Form):
        _translate = QtCore.QCoreApplication.translate
        Form.setWindowTitle(_translate("Form", "Form"))
        self.pushButton.setText(_translate("Form", "PushButton"))

    def send_message(self):
        # do something here
        print("send message")


if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    Form = QtWidgets.QWidget()
    ui = Ui_Form()
    ui.setupUi(Form)
    Form.show()
    sys.exit(app.exec_())
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-08-28 11:18:12

您没有看到“动画”,因为根本没有按下按钮,但是可以使用QAbstractButton.animateClick触发它。

代码语言:javascript
复制
send_message_shortcut.activated.connect(self.pushButton.animateClick)

这将设置按下的按钮(如setDown(True)中的按钮),然后在默认的100 as间隔后恢复该按钮,并分别发送releasedclicked信号。如果您想要一个不同的时间间隔,请使用lambda (或者在您自己的方法中这样做),并在ms中设置参数。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57668186

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档