4

WindowsでsetRange(0, 0)のときにQProgressBarの真ん中にテキスト(数字だけでなく)を配置する方法は?

以下は、まだ期待どおりに動作しない PyQt の例です。

import sys
from PyQt4.QtGui import *
from PyQt4.QtCore import *

class MainWindow(QMainWindow):

    def __init__(self, parent=None):
        super(MainWindow, self).__init__(parent)
        self.resize(800, 600)

#        self.lb=QLabel('finding resource   ')

        self.pb = QProgressBar()
        self.pb.setRange(0, 0)

        self.pb.setAlignment(Qt.AlignCenter)
        self.pb.setFormat('finding resource...')
        self.pb.setStyleSheet("text-align: center;")

#        self.pb.setTextVisible(False)


        self.statusBar().setSizeGripEnabled(False)
#        print(self.statusBar().layout() )
        self.statusBar().setStyleSheet("QStatusBar::item {border: none;}")
        self.statusBar().addPermanentWidget(self.pb, 1)


if __name__ == "__main__":
    app = QApplication(sys.argv)

    ui = MainWindow()
    ui.show()
    sys.exit(app.exec_())
4

2 に答える 2

5

vahancho は彼の回答で理由をうまく説明し、 override に言及しましたQProgressBar.text()。幸いなことに、これは Python では簡単で、私はその方法を知っています。

from PySide import QtGui, QtCore

class MyProgressBar(QtGui.QProgressBar):
"""
    Progress bar in busy mode with text displayed at the center.
"""

    def __init__(self):
        super().__init__()
        self.setRange(0, 0)
        self.setAlignment(QtCore.Qt.AlignCenter)
        self._text = None

    def setText(self, text):
        self._text = text

    def text(self):
        return self._text

app = QtGui.QApplication([])

p = MyProgressBar()
p.setText('finding resource...')
p.show()

app.exec_()

与える

ここに画像の説明を入力

これは Windows 7 上にあります。

ところで。最初に、ブルート フォース アプローチについて考えましQStackedLayoutた。それも常に機能するはずです。QLabelQProgressBar

于 2015-01-07T09:07:02.277 に答える