微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

悬停动画在 PyQT5 中的 QSS 中不起作用

如何解决悬停动画在 PyQT5 中的 QSS 中不起作用

我正在尝试在 PyQT5 中创建我的第一个 UI。但是,我无法向我的按钮添加悬停动画,我无法弄清楚为什么它不起作用。

我正在尝试使用此样式表,而不是关闭 QPushButton#authenticate_button:hover 我也尝试了 #authenticate_button 和 QPushButton,但似乎没有任何效果

$.ajax({
    type: "POST",url: "ResourceAddView",cache: false,data : {
        ssAccountLevel : sessionStorage.getItem('ssAccountLevel'),ssAccountID : sessionStorage.getItem('ssAccountID'),image : img2,imageType : imageType,resourceType: $("#resourceTypeAdd").val(),resourceName: $("#resourceNameAdd").val(),resourceDescription: $("#resourceDescriptionAdd").val(),},})
.fail (function(jqXHR,textStatus,errorThrown) {
    //alert(jqXHR.responseText);
    $('#ajaxGetUserServletResponse13').text('Error adding Resource.');
})
.done(function(responseJson){
    $('#ajaxGetUserServletResponse13').text('Resource added.');
    showResourceDataTable();
})

它目前看起来像这样,但是当我将鼠标悬停在元素上时没有变化。

Issue

这是全部代码,抱歉我尽量缩短它,但我不想遗漏重要的细节:

self.background_window.setStyleSheet("#authenticate_button {\n"
                                    "color: white;\n"
                                    "background-color: qlineargradient(x1: 0,y1: 0,x2: 1,y2: 1,stop: 0 rgba(0,145,224,255),stop: 1 rgba(0,250,215,255)) ;\n"
                                    "border-radius: 0;\n"
                                    "border-radius: 20px;\n"
                                    "}\n"
                                    "\n"
                                    "#background_window {\n"
                                    "border-radius: 10px;\n"
                                    "background-color: rgb(50,50,50);\n"
                                    "}\n"
                                    "\n"
                                    "#key_textfield {\n"
                                    "background-color: transparent;\n"
                                    "border: 2px solid grey;\n"
                                    "border-radius: 10px;\n"
                                    "}\n"
                                    "QPushButton#authenticate_button:hover {\n"
                                    "border-radius: 30px;\n"
                                    "}\n"
                                    "")

解决方法

您正在禁用窗口及其中央小部件。

当一个小部件被禁用时,它不会接收任何鼠标事件,包括悬停事件。显然,当父小部件被禁用时,任何子部件(以及任何级别的子部件)都会被禁用。[1]

因此,请考虑仅禁用父窗口(主窗口),因为重新启用已禁用的小部件只会重新启用明确禁用的子窗口。在您的情况下,如果您在窗口上调用 setEnabled(True),它无论如何都不会工作,因为中央小部件已被禁用。

然后,确保对象名称选择器也使用该类,因为如果您不够小心,您可能会添加一个具有相同对象名称但具有不同类的子部件,即使它应该继承样式表't。

此外,请考虑使用 layout managers(它们很容易 created in Designer too),因为使用固定几何图形通常被认为是不好的做法,并且几乎总是会导致显示问题(请记住,您在屏幕上看到的是永远别人在他们的字体中看到的,尤其是显示文本的小部件,更重要的是如果您使用的是非默认字体)。

[1] enabled property documentation 表示唯一的例外是 QAbstractButton(包括 QPushButton)的子类,它 accept mouse events even when disabled。这可能有悖常理并且可能令人困惑;现实情况是,接受一个事件并不意味着它实际上被处理了,所以这并不意味着被禁用的按钮实际上接收并响应这些事件(因为它们不应该!)而只是 event() 返回 { {1}} 而不是 True(这是任何其他小部件在禁用时将返回的内容),以便事件不会传播到父级。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。