[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