Kim
Kim

Reputation: 3494

QLabel setText not displaying text immediately before running other method

I have a basic label that is supposed to indicate to the user that the program is searching directories for several seconds. So it goes like...

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

My problem is that the label never displays "Searching...". The execution always seems to jump straight to run the method to scan directories, and then the label text is set to "Search Complete" after the method which scans directories has finished.

I'd be grateful if someone could please explain why this is happening or suggest a better way to resolve the problem.

many thanks

Upvotes: 15

Views: 27079

Answers (3)

tCot
tCot

Reputation: 357

In PyQt5, you don't need to use QString :

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

Upvotes: 0

Sebastian Ax
Sebastian Ax

Reputation: 1340

Add include:

#include <qapplication.h>

Let Qt process events:

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

Note: repaint() was not necessarie.

Upvotes: 1

ismail
ismail

Reputation: 47572

Your "method to search directories" is blocking the GUI hence QLabel is not able to update the text. You can make your search routine asynchronous or go the easy way and force QLabel to update itself:

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

Upvotes: 36

Related Questions