On Sunday 05 April 2009 19:56:59 massimo di stefano wrote:
> Hi All,
> i'm doing my first experience using pyqt and tring to learn more about
> it
> unlucky i'm not able to solve some problems by myself :-(
> i tried to resume my problem in a sample script, that is :
> class Gui(QtGui.QWidget):
>       def __init__(self, parent=None):
>               QtGui.QGroupBox.__init__(self, parent)
>               self.gcenter = QtGui.QPushButton("X", self)
>               self.gcenter.setAutoRepeat(True)
>               self.connect(self.gcenter, 
> QtCore.SIGNAL("clicked()"),self.count)
>               guiLayout = QtGui.QGridLayout()
>               guiLayout.addWidget(self.gcenter,1,0)
>               self.setLayout(guiLayout)
>       def count(self):
>               n = 0
>               step = 1
>               while True:
>                       n += step
>                       print n
>                       time.sleep(0.5)

This is a so called "busy-loop", a programming technic back from the days of 
DOS (the operating system). Don't use it. While the sleep-statement actually 
makes your app sleep for a certain time (so its not really a busy-loop), it 
still stops your app from execution during that time. Which means there are no 
repaints, button-clicks or anything else possible. You encounter that as "my 
app freezes".

The correct Qt-like way for such a loop is:
 - Either execute QCoreApplication.processEvents() inside the loop.
 - Or make your "heavy work" a slot that does just a little of the stuff in one 
step and then re-schedules itself either by QTimer.singleShot(...) or by 
adding a QTimer to your object and let it run continuously and connecting the 
timeout signal to your slot.


> as you can see the gui do not exit from the "while" statment
> and it freeze ...
> i know, i need to learn more about QTrhead usage...

No, if your level of experience is anywhere near the level I think it is, you 
will want to postpone any threads to a later day. There are actually very few 
problems that definitely need threads, Qt's slots combined with Qt's eventloop 
(automaticly used by the slots in my examples above) do a pretty good job for 
that.

Have fun,

Arnold

Attachment: signature.asc
Description: This is a digitally signed message part.

_______________________________________________
PyQt mailing list    [email protected]
http://www.riverbankcomputing.com/mailman/listinfo/pyqt

Reply via email to