Python 如何在QProgressBar上用忙指示器显示文本?
我想在QProgressBar上显示文本。我正在使用Python 如何在QProgressBar上用忙指示器显示文本?,python,qt,qt4,pyqt,pyqt4,Python,Qt,Qt4,Pyqt,Pyqt4,我想在QProgressBar上显示文本。我正在使用setRange(0,0)来显示忙指示灯 progressBar = QProgressBar() progressBar.setFormat('some text') progressBar.setValue(0) progressBar.setRange(0, 0) 我必须删除setRange(0,0),否则将不显示文本。有没有一种方法可以同时显示忙指示器和文本?您正在寻找QProgressDialog类。以下是一个例子: import
setRange(0,0)
来显示忙指示灯
progressBar = QProgressBar()
progressBar.setFormat('some text')
progressBar.setValue(0)
progressBar.setRange(0, 0)
我必须删除
setRange(0,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_()
您正在查找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_()
在与@Onlyjus反复讨论之后,我终于明白了整个问题。以下是一个解决方案:
from PyQt4 import QtGui, QtCore
import os
import time
class MyBar(QtGui.QWidget):
i = 0
style ='''
QProgressBar
{
border: 2px solid grey;
border-radius: 5px;
text-align: center;
}
'''
def __init__(self):
super(MyBar, self).__init__()
grid = QtGui.QGridLayout()
self.bar = QtGui.QProgressBar()
self.bar.setMaximum(1)
self.bar.setMinimum(0)
self.bar.setStyleSheet(self.style)
self.bar.setRange(0,0)
self.label=QtGui.QLabel("Nudge")
self.label.setStyleSheet("QLabel { font-size: 20px }")
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_()
在与@Onlyjus反复讨论之后,我终于明白了整个问题。以下是一个解决方案:
from PyQt4 import QtGui, QtCore
import os
import time
class MyBar(QtGui.QWidget):
i = 0
style ='''
QProgressBar
{
border: 2px solid grey;
border-radius: 5px;
text-align: center;
}
'''
def __init__(self):
super(MyBar, self).__init__()
grid = QtGui.QGridLayout()
self.bar = QtGui.QProgressBar()
self.bar.setMaximum(1)
self.bar.setMinimum(0)
self.bar.setStyleSheet(self.style)
self.bar.setRange(0,0)
self.label=QtGui.QLabel("Nudge")
self.label.setStyleSheet("QLabel { font-size: 20px }")
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_()
谢谢,但它不会在进度条上显示文本,而是在进度条上方显示文本。这不是我想要的。谢谢,但它不会在进度条上显示文本,而是在进度条上方显示文本。这不是我想要的。它似乎在闪烁,因为状态每0.5秒在开/关之间变化。当条形图的值为1(100%)时,指示器显示已满(即进度记号填充整个条形图)。当条形图的值为0(0%)时,指示器将清除所有刻度。我相信这就是最初的问题所要求的。条形图的值每0.5秒在1和0之间切换一次。当范围设置为0,0时,
setRange(0,0)
,progressbar将进入特定于样式的“忙碌”模式。通常,这是一个具有单个块的条,该块从条的一端移动到另一端,或来回反弹。它不会闪烁。试试QtDesigner。是的,我明白你现在在说什么。我把忙碌模式误认为是“开/关”指示灯,而不是左右移动的指示灯。我只是用另一个小部件更新了我的答案,它在进度条顶部显示文本,并带有滚动指示灯。更新就像一个符咒!我会接受这个答案。。。我调整了答案并将其发布在gist上:它似乎在闪烁,因为状态每0.5秒在开/关之间变化。当条形图的值为1(100%)时,指示器显示已满(即进度记号填充整个条形图)。当条形图的值为0(0%)时,指示器将清除所有刻度。我相信这就是最初的问题所要求的。条形图的值每0.5秒在1和0之间切换一次。当范围设置为0,0时,setRange(0,0)
,progressbar将进入特定于样式的“忙碌”模式。通常,这是一个具有单个块的条,该块从条的一端移动到另一端,或来回反弹。它不会闪烁。试试QtDesigner。是的,我明白你现在在说什么。我把忙碌模式误认为是“开/关”指示灯,而不是左右移动的指示灯。我只是用另一个小部件更新了我的答案,它在进度条顶部显示文本,并带有滚动指示灯。更新就像一个符咒!我会接受这个答案。。。我调整了答案并将其发布在gist上: