热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

有没有办法更改所有QMessageBox的OK按钮的样式表?

我想让我的所有QMessageBoxGUI的OK按钮(它非常复杂,所以有很多)相对于其他按钮(取消、否等)设置不同的颜色。我不想在每次创建新的时

我想让我的所有QMessageBoxGUI的 OK 按钮(它非常复杂,所以有很多)相对于其他按钮(取消、否等)设置不同的颜色。

我不想在每次创建新的时都设置它的颜色,QMessageBox但我想通过我的应用程序的样式表一劳永逸地设置它。

我尝试了不同的选择,但都没有奏效:

- QMessageBox#okButton {background-color:blue}
- QMessageBox::okButton {...}
- QMessageBox:okButton {...}
- QMessageBox#ok-button {...}
- QMessageBox QPushButton#okButton {...}

和别的...

有没有办法或者我必须放弃?

回答


一个可能的解决方案是将 设置objectName()为每个按钮的选择器,为此您可以使用 的notify()方法QApplication

from PySide2.QtCore import QEvent
from PySide2.QtWidgets import *
class Application(QApplication):
def notify(self, receiver, event):
if isinstance(receiver, QMessageBox) and event.type() == QEvent.Show:
for button in receiver.buttons():
sb = receiver.standardButton(button)
if not button.objectName():
button.setObjectName(sb.name.decode())
button.style().unpolish(button)
button.style().polish(button)
return super().notify(receiver, event)
def main():
app = Application()
app.setStyle("fusion")
app.setStyleSheet(
"""
QPushButton#Ok { background-color: green }
QPushButton#Cancel { background-color: red }
"""
)
QMessageBox.critical(
None, "Title", "text", buttOns=QMessageBox.Ok | QMessageBox.Cancel
)
msgBox = QMessageBox()
msgBox.setText("The document has been modified.")
msgBox.setInformativeText("Do you want to save your changes?")
msgBox.setStandardButtons(QMessageBox.Ok | QMessageBox.Cancel)
msgBox.exec_()
if __name__ == "__main__":
main()






推荐阅读
author-avatar
手机用户2502886745
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有