Добавление системного значка QMessageBox в QDialog

#python #python-3.x #pyqt5 #pyside2

#python #python-3.x #pyqt5 #pyside2

Вопрос:

Прежде всего, я хочу использовать подкласс 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, но мне интересно, как я могу добавить QMessageBox.Значок предупреждения (также включающий заголовок QMessageBox и информативный стиль текста) в QDialog, возможно ли это?. Если нет, то как я могу создать расстояние между значком QMessageBox и его текстом из макета области прокрутки? (потому что это кажется более простым решением IMO), ps: я действительно хочу свести к минимуму внешние носители для значка, поскольку мое приложение выполняет только простую задачу, поэтому мне действительно любопытно, могу ли я вместо этого использовать значок QMessageBox или, если нет другого способа, я буду следить за тем, что это такое.

Ответ №1:

Решение состоит в том, чтобы удалить QDialogButtonBox, добавить QScrollArea, а затем добавить удаленный QDialogButtonBox:

 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. это сработало!. Спасибо. вы помогали мне много раз. 1 кофе от меня