QProgressBar 与 PyQt4 的奇怪行为

Posted

技术标签:

【中文标题】QProgressBar 与 PyQt4 的奇怪行为【英文标题】:Strange behavior of QProgressBar with PyQt4 【发布时间】:2011-11-29 23:01:07 【问题描述】:

我有这个代码示例:

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

class Bar(QDialog):    
    def __init__(self, parent=None):
        super(Bar, self).__init__()        
        self.pbar = QProgressBar(self)
        self.pbar.setValue(0)
        layout = QHBoxLayout()
        layout.addWidget(self.pbar)
        self.setLayout(layout)

    def main(self):
        for value in range(1, 100):
            time.sleep(1)
            print value
            self.pbar.setValue(value)

app = QApplication(sys.argv)
form = Bar()
form.show()
form.main()
app.exec_()

我希望进度条的值每秒增加 1。 相反,尽管所有值都打印在屏幕上,但进度条只显示其中的一部分。此外,该条仅在 value == 5 时出现。我知道如何使用 QBasicTimer() 获得适当的结果,但为什么这个不起作用?我犯了一个愚蠢的错误吗?

【问题讨论】:

【参考方案1】:

尝试添加一个

QApplication.processEvents()

就在 print value 之后(这应该会强制 UI 更新)。

【讨论】:

以上是关于QProgressBar 与 PyQt4 的奇怪行为的主要内容,如果未能解决你的问题,请参考以下文章

PyQt4:QTextEdit 从第 n 行开始

如何在pyqt4的右侧对齐qtableview行?

如何在 PyQt4 中使用 setRowHeight 和 resizeRowToContents 调整行的大小?

使用 Python pyqt4 获取 QTableWidget 中特定行和列的单元格突出显示

为 QProgressBar 上的图像设置着色

如何让 PyQt4 与 PyCharm 一起工作