1

我想在 QProgressBar 上显示文本。我setRange(0, 0)用来显示忙碌指示器。

progressBar = QProgressBar()
progressBar.setFormat('some text')
progressBar.setValue(0)
progressBar.setRange(0, 0)

我必须删除setRange(0, 0),否则不会显示文本。有没有办法同时显示忙碌指示符和文本?

4

2 回答 2

1

在与@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_()
于 2014-10-03T15:41:40.157 回答
0

您正在寻找 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_()
于 2013-05-20T10:54:21.860 回答