[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