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, [email protected] wrote:
On Mon, 20 Sep 2010 13:35:30 +0200, vepro<[email protected]>  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
[email protected]
http://www.py.cz/mailman/listinfo/python

_______________________________________________
Python mailing list
[email protected]
http://www.py.cz/mailman/listinfo/python

Odpovedet emailem