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