Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

QLabel setText not displaying text immediately before running other method

Tags:

qt

pyqt

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

like image 229
Kim Avatar asked Dec 22 '10 15:12

Kim


2 Answers

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"))
like image 170
ismail Avatar answered Oct 02 '22 10:10

ismail


Add include:

#include <qapplication.h>

Let Qt process events:

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

Note: repaint() was not necessarie.

like image 37
Sebastian Ax Avatar answered Oct 02 '22 10:10

Sebastian Ax