如何在PySide中对QMessageBox进行子类化并添加进度条

5
我对PySide和Qt都比较陌生。我想在QMessageBox中添加一个QProgressBar,它通常会出现在按钮的位置。我希望有一种方法可以子类化QMessageBox并更改其布局,但我从未在代码中使用过Qt布局,我一直使用Qt Designer和pyside-uic。
我已经在Qt Designer中创建了一个概念,我希望通过子类化QMessageBox来实现类似的功能。我已经查看了QProgressDialog,但它太过死板。我希望能够使用QMessageBox Icon枚举来设置图标。 Concept

你可以创建一个带有标签、图标和进度条的新窗体。为什么要对QMessageBox进行子类化呢? - Pavel Strakhov
2
我想要QMessageBox的布局,并且能够使用QMessageBox图标枚举。 - chyyran
2个回答

9

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)。但是关闭按钮也将被禁用...


0

你可以随时将自己的布局添加到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)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接