Portál AbcLinuxu, 8. května 2025 04:22
Hledám nějaký manuál či tutorial, kde by bylo popsáno programování vláken v GUI (pomocí PyQt). Google tyto info. přede mnou poněkud tají. Děkuju.
V PyQt jsem už dlouho nedělal, ale bude to nějak takhle:
class MojeVlakno(QThread): def run(): pass #tohle se provede ve vlakne moje_vlakno = MojeVlakno(); moje_vlakno.start();
Pro více info viz: http://www.riverbankcomputing.co.uk/static/Docs/PyQt4/html/qthread.html
Ty středníky tam nedávej . Už mi hrabe
.
ono je to v podstate stejne jako pro kazda jina vlakna... Je treba dat pozor, ze samotna trida MojeVlakno zije v hlavnim vlakne aplikace (GUI vlakno), takze pokud chces pristupovat k nejakym svym definovanym objektum pro tu tridu jak z MojeVlakno::run tak z jinych mist, tak musis pouzit mutex (QMutex).
Vyhodou QThreadu je to, ze je mozne napojovat signaly mezi vlakny a to za pouziti QuedConnection signalu, ktere jsou thread-safe (nemusis se starat o mutexy atd, jen proste posles signal z worker threadu a gui thread ho prijme a nic se neposere) (viz http://doc.trolltech.com/4.4/threads.html#signals-and-slots-across-threads)
Jednoduchy priklad muzes videt treba na nasem autoaway pluginu pro Jabbim http://dev.jabbim.cz/jabbim/browser/trunk/plugins/autoaway/autoaway.py . Neni to sice nejlepsi kod, protoze je asi tak stary jako Jabbim sam a ja se to tehdy jeste ucil, ale fungovat funguje :) a ta prace z thready tam je imho v pohode.
Jinak jeste dodam, ze z worker threadu samozrejme nesmis volat GUI funkce (nemuzes udelat self.parent().ui.lineEdit.setText(...)), tohle je prave idealni wrappovat pres ty signaly :). proste v tom threadu nesmis pouzivat Qt tridy pripadne funkce, ktere nejsou thread-safe (napriklad QPixmap tam pouzit nejde, ale QImage uz jo).
U me doma python-qt4-doc obsahuje mimo jine taky priklady na pouziti QThreadu. a samotna dokumentace ke Qt ma taky plno prikladu, staci si v googlu najit 'docs trolltech' a tam je hned odkaz na dokumentaci o threadech (jo, nechce se mi hledat ten link ted... :) )
Díky všem za info...
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.