Как создать подкласс QMessageBox и добавить индикатор выполнения в PySide

Я новичок в PySide и Qt в целом. Я хочу добавить QProgressBar в QMessageBox, где обычно будут кнопки. Я надеюсь, что есть какой-то способ создать подкласс QMessageBox и изменить его макет, но я никогда не делал макет Qt в коде, я все делал с помощью Qt Designer и pyside-uic.

Я создал концепцию в Qt Designer, я хотел бы, чтобы что-то подобное было сделано путем создания подкласса QMessageBox. Я просмотрел QProgressDialog, но он слишком негибкий. Я хотел бы иметь возможность использовать перечисление QMessageBox Icon для значка.

Концепция


person chyyran    schedule 11.11.2013    source источник
comment
Вы можете просто создать новую форму с меткой, значком и индикатором выполнения. Почему вы хотите создать подкласс QMessageBox?   -  person Pavel Strakhov    schedule 12.11.2013
comment
Мне нужен макет QMessageBox и возможность использовать перечисления QMessageBox Icon.   -  person chyyran    schedule 12.11.2013


Ответы (2)


QMessageBox использует QGridLayout. Итак, вы можете добавить свой QProgressBar в его макет:

msgBox = QMessageBox( QMessageBox.Warning, "My title", "My text.", QMessageBox.NoButton )

# Get the layout
l = msgBox.layout()

# Hide the default button
l.itemAtPosition( l.rowCount() - 1, 0 ).widget().hide()

progress = QProgressBar()

# Add the progress bar at the bottom (last row + 1) and first column with column span
l.addWidget(progress,l.rowCount(), 0, 1, l.columnCount(), Qt.AlignCenter )

msgBox.show()

Вы также можете удалить кнопки msgBox.setStandardButtons( QMessageBox.NoButton ). Но кнопка закрытия тоже будет отключена...

person Dimitry Ernot    schedule 14.11.2013

вы всегда можете добавить свой собственный макет в QProgressDialog.

layout = QtGui.QHBoxLayout()
self.setLayout(layout)

# layout.setContentsMargins(0, 0, 0, 0)
layout.setAlignment(QtCore.Qt.AlignTop)

icon = QtGui.QApplication.style().standardIcon(QtGui.QStyle.SP_FileIcon)
self.label = QtGui.QLabel()
self.label.setPixmap(icon.pixmap(16, 16))
self.label2 = QtGui.QLabel("My Label")
layout.addWidget(self.label)
layout.addWidget(self.label2)
person justengel    schedule 20.11.2013