如何解决悬停动画在 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();
})
它目前看起来像这样,但是当我将鼠标悬停在元素上时没有变化。
这是全部代码,抱歉我尽量缩短它,但我不想遗漏重要的细节:
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 举报,一经查实,本站将立刻删除。