[PyQt] pyqt4 problem with label.setText timing within loops

Phil Thompson phil at riverbankcomputing.com
Tue Feb 16 09:47:46 GMT 2010


On Tue, 16 Feb 2010 00:12:47 -0500, Dan Cherry <dan.s.cherry at gmail.com>
wrote:
> I'm trying to run a simple 'for' loop to execute some external programs 
> (ripping tracks with cdparanoia/lame, but I've stripped the problem down 
> to bare essentials that demonstrate the problem).
> 
> Each loop should update a gui label with the current loop number.  The
> setText statement is within the 'for' loop, but the gui doesn't get
> updated until the loop is either completed or several iterations into
> the complete loop.  The loop works, but the updates to the  label do not.
> 
> The Gui was created with QTDesigner, and I'm using python 2.6.4 on
> Ubuntu 9.10.
> 
> The statements that are crucial follow below, and I've attached the two
> py files if you care to see the full code.
> 
> Any suggestions for getting the label.setText statements to update the 
> gui with each loop iteration, would be appreciated.
> 
> TIA,
> Dan Cherry
> 
> 
>      def runloop(self):
>          self.ui.label.setText('Begin Loop') ## <--doesn't update before 
> loop
> 
>          for i in range(1,6):
>              self.ui.label.setText('loop %s' % i) ## <--doesn't update 
> for each loop - but does update after the loop completes
>              rval = self.loop(i)
> 
>      def loop(self, loop_no):
>          time.sleep(3)
>          print loop_no  ## <--the print statements display properly as 
> the loop progresses
>          return

The GUI will only get updated when the event loop runs. Call
QCoreApplication.processEvents() after setText().

Phil


More information about the PyQt mailing list