【问题标题】:QLabel setText not displaying text immediately before running other methodQLabel setText 在运行其他方法之前不立即显示文本
【发布时间】:2011-05-29 11:37:19
【问题描述】:

我有一个基本标签,应该向用户表明程序正在搜索目录几秒钟。所以它就像......

self.label.setText(QString("Searching..."))
# method to search directories goes here
self.label.setText(QString("Search Complete"))

我的问题是标签从不显示“正在搜索...”。执行似乎总是直接跳转运行扫描目录的方法,然后在扫描目录的方法完成后将标签文本设置为“搜索完成”。

如果有人能解释为什么会发生这种情况或提出解决问题的更好方法,我将不胜感激。

非常感谢

【问题讨论】:

    标签: qt pyqt


    【解决方案1】:

    您的“搜索目录的方法”阻止了 GUI,因此 QLabel 无法更新文本。您可以使您的搜索例程异步或采用简单的方法并强制 QLabel 自行更新:

    self.label.setText(QString("Searching..."))
    self.label.repaint()
    # method to search directories goes here
    self.label.setText(QString("Search Complete"))
    

    【讨论】:

    • 太好了。非常感谢您的回复。
    • 我在 repaint() 之后添加了 qApp->processEvents(),这对我有用。见stackoverflow.com/a/2066916/2706918
    • 没有完全适合我,有些文字被截断了。
    • @bakalolo 这是一个布局问题,与这个问题无关。
    • 那为什么会显示部分时间的全文呢?仅当我在开始计算之前而不是之后尝试更新标签时,我的文本才被截断。
    【解决方案2】:

    添加包括:

    #include <qapplication.h>
    

    让Qt处理事件:

    self.label.setText(QString("Searching..."))
    qApp->processEvents();
    

    注意:repaint() 不是必需的。

    【讨论】:

      【解决方案3】:

      在 PyQt5 中,你不需要使用 QString :

      self.label.setText("Searching...")
      self.label.repaint()
      self.label.setText("Search Complete")
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-09-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-06-11
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多