【问题标题】:Adding QMessageBox System Icon into QDialog将 QMessageBox 系统图标添加到 QDialog
【发布时间】:2020-10-29 01:00:01
【问题描述】:

首先,我想使用 QMessageBox 子类在 QMessageBox 信息文本及其底部按钮之间嵌入滚动区域布局。但是滚动区域像这样与图标重叠

class CustomizedMessagebox(QMessageBox):
    def __init__(self,parent,dic):
        QMessageBox.__init__(self,parent)
        self.setIcon(QMessageBox.Warning)
        self.setText("Sample Warning Text Here")
        scroll = QScrollArea(self)
        scroll.setWidgetResizable(True)
        self.content = QWidget()
        scroll.setWidget(self.content)
        lay = QVBoxLayout(self.content)
        for item in [[1,2],[3,4],[5,6],[7,8],[9,0]]: #just for scroll able example list
            lay.addWidget(QLabel("{} - {}".format(item[0],item[1]), self))
        self.layout().addWidget(scroll, 1, 0, 1, self.layout().columnCount())
        #self.setStyleSheet("QScrollArea{min-width:200 px; min-height: 200px}") #style that i want to add later on
        self.addButton('Understood',self.AcceptRole)

所以我决定改为创建 QDialog,但我想知道如何在 QDialog 中添加 QMessageBox.Warning 图标(还包括 QMessagebox 标题和信息文本样式),这可能吗?如果不是,那么我如何在 QMessagebox Icon 与其文本与滚动区域布局之间创建距离? (因为它似乎更简单的解决方案 IMO),ps:我真的想最小化图标的外部媒体,因为我的应用程序只执行一个简单的任务,所以这就是为什么我真的很好奇我是否可以使用 QMessagebox 图标或者没有其他方法不管是什么我都会关注的。

【问题讨论】:

    标签: python python-3.x pyqt5 pyside2


    【解决方案1】:

    解决方法是去掉QDialogBu​​ttonBox,添加QScrollArea,再添加去掉的QDialogBu​​ttonBox:

    from PySide2.QtWidgets import (
        QApplication,
        QDialogButtonBox,
        QLabel,
        QMessageBox,
        QScrollArea,
        QVBoxLayout,
        QWidget,
    )
    
    
    class CustomizedMessagebox(QMessageBox):
        def __init__(self, parent=None):
            QMessageBox.__init__(self, parent)
            self.setIcon(QMessageBox.Warning)
            self.setText("Sample Warning Text Here")
            self.addButton("Understood", QMessageBox.AcceptRole)
    
            scroll = QScrollArea(widgetResizable=True)
            self.content = QWidget()
            scroll.setWidget(self.content)
    
            box = self.findChild(QDialogButtonBox)
            self.layout().removeWidget(box)
    
            self.layout().addWidget(
                scroll, self.layout().rowCount(), 0, 1, self.layout().columnCount()
            )
            self.layout().addWidget(
                box, self.layout().rowCount(), 0, 1, self.layout().columnCount()
            )
    
            lay = QVBoxLayout(self.content)
            for item in [[1, 2], [3, 4], [5, 6], [7, 8], [9, 0]]:
                lay.addWidget(QLabel("{} - {}".format(item[0], item[1]), self))
    
    
    app = QApplication([])
    w = CustomizedMessagebox()
    w.exec_()
    

    【讨论】:

    • 成功了!谢谢你。你帮助了我无数次。 +1 我的咖啡
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多