Portál AbcLinuxu, 13. května 2025 06:37
from PyQt4 import QtCore, QtGui import sys import threading import time class oknoHlavni: def __init__(self): self.klient = klient(self) ########################## ## Hlavni okno programu ## ########################## self.app = QtGui.QApplication(sys.argv) self.mainWindow = QtGui.QMainWindow() self.mainWindow.setWindowTitle("Moje okno") self.mainWidget=QtGui.QWidget(self.mainWindow) self.mainWindow.setCentralWidget(self.mainWidget) self.layout=QtGui.QGridLayout(self.mainWidget) ################# ## WIDGET CHAT ## ################# self.widgetChat=QtGui.QWidget(self.mainWidget) self.layout.addWidget(self.widgetChat,1,0,1,1) self.layoutChat=QtGui.QGridLayout(self.widgetChat) # okno na zpravy - sklo self.chatSklo=QtGui.QTextEdit(self.widgetChat) self.chatSklo.setReadOnly(True) # prida objekty do layoutu self.layoutChat.addWidget(self.chatSklo,1,0,1,3) self.obnoveniOkna() self.klient.start() def obnoveniOkna(self): self.mainWindow.show() def skloZapisText(self, text): print "skloZapisText: ", text self.chatSklo.setText(text) class klient: def __init__(self, rodic): self.grafika = rodic def start(self): v1 = threading.Thread(target = self.vlakno) v1.start() def vlakno(self): print "Vlakno" for i in range(50): time.sleep(0.5) self.grafika.skloZapisText("Vlakno..."+str(i)) grafika = oknoHlavni() sys.exit(grafika.app.exec_())Program vypíše:
Vlakno skloZapisText: Vlakno...0 QObject: Cannot create children for a parent that is in a different thread. Atd...Předem díky za rady
self.grafika(QtCore.SIGNAL("progress(int)"), nejake_cislo)
Do první třídy (oknoHlavni) bych dal toto:
self.app.connect(?co sem?, QtCore.SIGNAL("progress(int)"), self.skloZapisText)
Jenže co mám dát jako první parametr?
klient
dědila od QtCore.QObject
, tak by se dal vyvolat vlastní signál přes self.emit
. Více tady. A tady máš referenční příručku ke všem PyQt4 třídám.
class klient : public QThread { Q_OBJECT signals: void addText(QString text); // atd. }; class oknoHlavni : public Q... { Q_OBJECT slots: void textReceived(QString text); }; // a pak někde connect(m_pClient, SIGNAL(addText(QString)), this, SLOT(textReceived(QString))); // posílání: emit addText(nejakyText); // šlo mi snad i bez emit (?)(Sorry, ale Python fakt ne-e.)
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.