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

时间:2013-11-11 22:28:04

标签: python qt progress-bar pyside qmessagebox

我对PySide很新,而且一般都是Qt。我想将QProgressBar添加到QMessageBox中,按钮通常在QMessageBox中。我希望有一些方法来继承QMessageBox并改变它的布局,但我从来没有在代码中做过Qt布局,我已经用Qt Designer和pyside-uic完成了所有工作。

我在Qt Designer中创建了一个概念,我希望通过对QMessageBox进行子类化来完成类似的操作。我看过QProgressDialog,但它太不灵活了。我希望能够使用QMessageBox图标枚举图标。

Concept

2 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分: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)