下面的代码将一堆PyQt4进度条计算为99%,我希望我的GUI NOT 能够冻结,因为它们的数量高达99%。如果有可能的话,我很乐意这样做没有自定义类或函数。 我知道使用类是好的,但对于这一小段代码,我不想创建一个类。 根据我的阅读,可能有一个update()函数可以实现这一点...请告知我是否在正确的轨道上
import sys
import time
from PyQt4 import QtGui
from PyQt4 import QtCore
app = QtGui.QApplication(sys.argv)
widget = QtGui.QWidget()
widget.resize(400, 200)
widget.setWindowTitle('simple')
widget.show()
shift = 0
cntControl = 5
barra = [0] * cntControl
for i in range(cntControl):
shift = shift + 10
barra[i] = QtGui.QProgressBar(widget)
barra[i].show()
barra[i].setMinimum(0)
barra[i].setMaximum(10000)
barra[i].setGeometry(QtCore.QRect(10, shift, 200, 10))
for a in range(10000):
for i in range(cntControl):
barra[i].setValue(a)
sys.exit(app.exec_())
答案 0 :(得分:1)
尝试使用以下命令更改for循环:
while True:
for a in range(10000):
time.sleep(0.0001)
for i in range(cntControl):
barra[i].setValue(a)
如果对我有用。 while循环继续无休止地移动栏。如果你只想在它到达终点后清理它,你应该使用reset:
PySide.QtGui.QProgressBar.reset() Reset the progress bar. The progress bar “rewinds” and shows no progress
OP评论后更新:如果您希望gui在进入长循环或其他操作时有响应,则应使用python thread module或QThreads。
答案 1 :(得分:0)
我真的无法让线程工作......我可以发布我的线程尝试,看起来完美无缺的眼睛......(
)然而,我能够调整http://zetcode.com/tutorials/pyqt4/widgets/的进度条示例,并提供以下代码...这解决了GUI中冻结的问题:
import sys
from PyQt4 import QtGui
from PyQt4 import QtCore
class Example(QtGui.QWidget):
def __init__(self):
super(Example, self).__init__()
self.setWindowTitle('ProgressBar')
self.setGeometry(300, 300, 250, 150)
self.pbar = [0] * 3
self.timer = [0] * 3
self.step = [0] * 3
self.shift = 0
for i in range(3):
self.shift = self.shift + 30
self.pbar[i] = QtGui.QProgressBar(self)
self.pbar[i].setGeometry(30, self.shift, 200, 25)
self.timer[i] = QtCore.QBasicTimer()
self.step[i] = 0
self.timer[i].start(100, self)
def timerEvent(self, event):
for i in range(3):
if self.step[i] >= 100:
self.timer[i].stop()
return
self.step[i] = self.step[i] + 1
self.pbar[i].setValue(self.step[i])
app = QtGui.QApplication(sys.argv) ex
= Example() ex.show() app.exec_()
我没有想法,为什么它有效,这可能不是一件好事。我猜它可能与super(Example, self).__init__()
和自定义计时器pyqt4使用有关。我真的希望在没有函数或类的情况下这样做,但不确定是否可行。如果您认为是,请随时发布!