首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QtWidgets.QProgressBar.setTextVisible(False)导致延迟

QtWidgets.QProgressBar.setTextVisible(False)导致延迟
EN

Stack Overflow用户
提问于 2018-07-25 09:57:57
回答 1查看 195关注 0票数 2

我有一个每秒更新的QProgressBar。它不需要百分比文本,所以我在创建时添加了progressBar.setTextVisible(False)。然而,这使得它的响应非常慢和滞后,因此它需要超过一秒钟的时间来更新。此外,其他代码将等待进度条更新以执行,从而使整个程序变慢。这既发生在进度条不显示文本的macOS上,也发生在像Ubuntu这样显示文本的OSes上。

为什么使进度文本不可见会导致这种情况,我如何解决这个问题(同时仍然删除进度文本)?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-07-25 10:40:41

这并不是说有滞后。为了更好地理解它,可以使用下面的比喻:假设有两个人,两个人都必须在1秒内前进1米,但第一个人每秒只执行跳转,而第二个人执行几个连续的步骤,所以第一个人在没有文本的进度条上是相似的,第二个人是有文本的。

当进度条的值改变时,如果有必要重新绘制它,它会被评估,如果有可见的文本,无论如何都会完成,尽管它不需要值是否已经改变,另一方面,如果除了改变的值之外没有其他文本,则要求该步骤是适当的,我认为出于性能原因。

这部分代码可以在下面的link中找到

解决方案是在每次发生更改时强制绘制。

代码语言:javascript
复制
progressBar.valueChanged.connect(progressBar.repaint)

示例:

代码语言:javascript
复制
import sys
from PyQt5 import QtCore, QtGui, QtWidgets

def create_progressBar(timeLine, isTextVisible, workaround=False):
    progressBar = QtWidgets.QProgressBar()
    progressBar.setTextVisible(isTextVisible)
    timeLine.frameChanged.connect(progressBar.setValue)
    if workaround:
        progressBar.valueChanged.connect(progressBar.repaint)
    progressBar.setRange(0, 100)
    return progressBar

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

    widget = QtWidgets.QWidget()
    lay = QtWidgets.QFormLayout(widget)
    timeLine = QtCore.QTimeLine(1000*10)
    timeLine.setFrameRange(0, 100)

    normal_with_text = create_progressBar(timeLine, True)
    normal_without_text = create_progressBar(timeLine, False)
    workaround_without_text = create_progressBar(timeLine, False, True)
    lay.addRow("normal_with_text", normal_with_text)
    lay.addRow("normal_without_text", normal_without_text)
    lay.addRow("workaround_without_text", workaround_without_text)

    timeLine.start()
    widget.show()
    sys.exit(app.exec_())
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51509798

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档