我想在 QProgressBar 上显示文本。我setRange(0, 0)
用来显示忙碌指示器。
progressBar = QProgressBar()
progressBar.setFormat('some text')
progressBar.setValue(0)
progressBar.setRange(0, 0)
我必须删除setRange(0, 0)
,否则不会显示文本。有没有办法同时显示忙碌指示符和文本?
在与@Onlyjus 来来回回之后,我终于明白了整个问题。这是一个解决方案[编辑为在 PyQt5 中工作]:
from PyQt5 import QtGui, QtCore
class MyBar(QtGui.QWidget):
def __init__(self):
super(MyBar, self).__init__()
grid = QtGui.QGridLayout()
self.bar = QtGui.QProgressBar()
self.bar.setRange(0, 0)
self.label = QtGui.QLabel("Nudge")
self.label.setAlignment(QtCore.Qt.AlignCenter)
grid.addWidget(self.bar, 0, 0)
grid.addWidget(self.label, 0, 0)
self.setLayout(grid)
class MainWindow(QtGui.QMainWindow):
def __init__(self, parent=None):
super(MainWindow, self).__init__(parent)
self.bar = MyBar()
self.setCentralWidget(self.bar)
if __name__ == '__main__':
app = QtGui.QApplication([])
win = MainWindow()
win.show();
QtGui.QApplication.instance().exec_()
基本上它会在进度条上浮动一个标签。
这是我提供的原始答案
我会把它留在这里,因为无论如何它可能会有所帮助。
使用 setFormat 方法和样式表。以下工作示例显示了如何。
from PyQt4 import QtGui, QtCore
import os
import time
class MainWindow(QtGui.QMainWindow):
i = 0
style ='''
QProgressBar
{
border: 2px solid grey;
border-radius: 5px;
text-align: center;
}
'''
def __init__(self, parent=None):
super(MainWindow, self).__init__(parent)
grid = QtGui.QGridLayout()
self.bar = QtGui.QProgressBar()
self.bar.setMaximum(1)
self.bar.setMinimum(0)
self.bar.setStyleSheet(self.style)
self.bar.setFormat("Custom %v units %p % %m ticks")
self.setCentralWidget(self.bar)
self.timer = QtCore.QTimer()
self.timer.timeout.connect(self.update)
self.timer.start(500) # update every 0.5 sec
def update(self):
print self.i
self.i += 1
self.i %= 2
self.bar.setValue(self.i)
if __name__ == '__main__':
app = QtGui.QApplication([])
win = MainWindow()
win.show();
QtGui.QApplication.instance().exec_()
您正在寻找 QProgressDialog 类。这是一个例子:
import sys
from PySide import QtGui
app = QtGui.QApplication(sys.argv)
progressbar = QtGui.QProgressDialog(labelText='Some Text...',
minimum = 0, maximum = 0)
progressbar.setWindowTitle('ProgressBar Demo')
progressbar.show()
app.exec_()