[python] update gui,vlakno

vepro p.zlamal na gmail.com
Úterý Září 21 14:01:26 CEST 2010


Oprava: je tam jen def redraw_gui(self)...bez value

On 09/21/2010 01:55 PM, vepro wrote:
> 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