[python] update gui,vlakno

vepro p.zlamal na gmail.com
Úterý Září 21 13:55:58 CEST 2010


Tak jsem zkusil pomoci signalu a slotu (nejprve jsem chtel odskouset 
funkcnost) a opet mam problem. Mam naspano:

class Transducer(QtGui.QWidget):
         def __init__(self):
                 QtGui.QWidget.__init__(self)
                 self.ui=Ui_silomer()        #imprtovane gui
                 self.show_win()
         def show_win(self):
             self.connect(self.ui.tara, QtCore.SIGNAL('clicked()'), 
self.set_tara)        #self.ui.tara is button
             
self.connect(self,QtCore.SIGNAL("updateGui()"),self,QtCore.SLOT("redraw_gui"))
             self.show()

         def set_tara(self):
                 self.tara=self.value_level
                 print "tara set:",self.tara
                 self.emit(QtCore.SIGNAL("updateGui()"))
         def redraw_gui(self,value):
                 print "redraw"


Pokud zmacknu button tara dojde k vypsani self.tara ale uz ne k vypsani 
"redraw". Tak nejak bych ocekaval, ze se aktivuje metoda redraw_gui, 
kdyz byl emitovan signal (do teto metody pak chci implementovat obnoveni 
prvku v gui, kde signal bude emitovan prave z vlakna). Nebo se pletu? 
Pro formu jsem odskousel napojeni signalu na zavreni okna:
self.connect(self,QtCore.SIGNAL("updateGui()"),self,QtCore.SLOT("close()"))
A tento signal funguje (okno se zavre), tudiz nerozumim proc s close() 
napojeni funguje a s moji metodou ne.
Vepro

On 09/20/2010 03:12 PM, petr na scribus.info wrote:
> On Mon, 20 Sep 2010 13:35:30 +0200, vepro<p.zlamal na gmail.com>  wrote:
>    
>> Zkousim napsat aplikaci, ktera prijma data po seriove lince a ty pak
>> zobrazuje v gui (qt4). Prijmaci cast resim jako smycku v samostatnem
>> vlakne a narazil jsem na problem v obnoveni gui (bezici v "hlavnim
>> vlakne"). Pokud zapisu novou hodnotu v mericim vlakne na nejaky gui
>> prvek (konkretne QLCDNumber.display()) dojde k jeho aktualizaci jen v
>> nejakych pripadech a ne vzdy, tak jak bych potreboval. Lze toto resit
>> nejak elegatne?
>>      
> jak prijimaci vlakno komunikuje s gui casti?
>
> Pokud s Qt4 pouzivas vlakna, pak tato vlakna nesmi nastavovat gui
> primo, ale treba pomoci signalu a slotu. Tj. nelze (pseudokod):
>
> # class Worker
> ...
>     def foo():
>        mylcd.display(bar)
>
> protoze mylcd je alokovane v gui event loopu, tudiz se data sice
> zobrazit mohou, ale take nemusi, anebo to cely zbuchne na rypak.
>
>     def foo():
>        emit dataAvailable(bar)
>
> # class Gui
>     conect(worker, SIGNAL(dataAvailable(int)), self,
> SLOT("worker_dataAvailable(int)))
>
>
>     def worker_dataAvailable(value):
>        mylcd.display(value)
>
> p.
>
> _______________________________________________
> Python mailing list
> Python na py.cz
> http://www.py.cz/mailman/listinfo/python
>    



Další informace o konferenci Python