Форум сайта python.su
Большущее спасибо, разобрался, что к чему. Чтобы не плодить тем, хотел бы спросить:
- поискал и нашёл вещь QList (http://doc.trolltech.com/4.4/qlist.html)
self.emit(QtCore.SIGNAL('data_from_thread(QList)'), data) как-то так писать?
- дело в том, что иногда требуется с функции получить целый список переменных (list)
- как поступить в таком случае? ведь полученное надо преобразовать к элементам и отправить в self.editor.append
Подскажите пожалуйста, если можно, ответа пока нигде не нашёл (как передать QList и его элементы отправить в self.editor)
Офлайн
когда коннектишь, не обязательно использовать существующие слоты эдитора для добавления строк, можно коннектить в своим функциям, передавая им параметр QList, а уже в этой функции обрабатывать список и добавлять данные в эдитор.
Офлайн
Tnx, так и думал примерно спасибо большое, идею понял про слот = функция:
class QWorker(QtCore.QThread):
def __init__(self, name):
QtCore.QThread.__init__(self)
self.name = name
def run(self):
try:#допустим в data уже получили list вот такой
data=['dssdsd', 'dsdsdssdd', 'blablala']
self.emit(QtCore.SIGNAL('data_from_data(QList)'), data)
time.sleep(0.1)
except Exception, e:
print e
class FormMain(QtGui.QMainWindow, Ui_MainWindow):
def __init__(self):
....
def addlist(self, QList):
for elements in QList:
self.editor.append(elements)
def updateUi(self): #вызывается при нажатии на кнопку ...
self.thread=QWorker(text)
self.connect(self.thread2, QtCore.SIGNAL('data_from_data(QList)'), self.addlist)
self.thread.start()
Офлайн
Я немного поковырял этот пример - вот что вышло:
# _*_ coding: utf-8 _*_
import sys, time
from threading import Thread
from PyQt4 import QtCore, QtGui
from PyQt4.QtCore import QObject, SIGNAL
class TextThread(Thread,QObject): #без QObject, получаю ниже ошибку - argument 1 of QObject.connect has an invalid type
def __init__(self, name, *args):
self.counter=0
self.name=name
super(TextThread, self).__init__(*args)
def run(self):
while self.counter < 20:
print self.name, self.counter
QtCore.QObject.emit(SIGNAL('BLA_BLA'), self.name)
self.counter = self.counter + 1
time.sleep(0.1)
class MainWindow(QtGui.QMainWindow):
def __init__(self, *args):
apply(QtGui.QMainWindow.__init__, (self,) + args)
self.editor=QtGui.QTextEdit(self)
self.setCentralWidget(self.editor)
self.thread1=TextThread("thread1")
self.thread2=TextThread("thread2")
QObject.connect(self.thread1, SIGNAL('BLA_BLA'), self.editor.append)
self.thread1.start()
self.thread2.start()
def main(args):
app=QtGui.QApplication(args)
win=MainWindow()
win.show()
app.exec_()
if __name__=="__main__":
main(sys.argv)
Офлайн
Немного изменил пример:
# _*_ coding: utf-8 _*_
import sys, time
from threading import Thread
from PyQt4 import QtCore, QtGui
from PyQt4.QtCore import QObject, SIGNAL
class TextThread(Thread):
def __init__(self, name, *args):
self.counter=0
self.name=name
super(TextThread, self).__init__(*args)
self.emitter = QObject()
def run(self):
while self.counter < 20:
print self.name, self.counter
self.emitter.emit(SIGNAL('BLA_BLA'), self.name)
self.counter = self.counter + 1
time.sleep(0.1)
class MainWindow(QtGui.QMainWindow):
def __init__(self, *args):
apply(QtGui.QMainWindow.__init__, (self,) + args)
self.editor=QtGui.QTextEdit(self)
self.setCentralWidget(self.editor)
self.thread1=TextThread("thread1")
self.thread2=TextThread("thread2")
self.connect(self.thread1.emitter, SIGNAL('BLA_BLA'), self.editor.append)
self.connect(self.thread2.emitter, SIGNAL('BLA_BLA'), self.editor.append)
self.thread1.start()
self.thread2.start()
def main(args):
app=QtGui.QApplication(args)
win=MainWindow()
win.show()
app.exec_()
if __name__=="__main__":
main(sys.argv)
# _*_ coding: utf-8 _*_
import sys, time
from threading import Thread
from PyQt4 import QtCore, QtGui
from PyQt4.QtCore import QObject, SIGNAL
class TextThread(Thread,QObject):
def __init__(self, name, *args):
QObject.__init__(self)
self.counter=0
self.name=name
super(TextThread, self).__init__(*args)
def run(self):
while self.counter < 20:
print self.name, self.counter
self.emit(SIGNAL('BLA_BLA'), self.name)
self.counter = self.counter + 1
time.sleep(0.1)
class MainWindow(QtGui.QMainWindow):
def __init__(self, *args):
apply(QtGui.QMainWindow.__init__, (self,) + args)
self.editor=QtGui.QTextEdit(self)
self.setCentralWidget(self.editor)
self.thread1=TextThread("thread1")
self.thread2=TextThread("thread2")
self.connect(self.thread1, SIGNAL('BLA_BLA'), self.editor.append)
self.connect(self.thread2, SIGNAL('BLA_BLA'), self.editor.append)
self.thread1.start()
self.thread2.start()
def main(args):
app=QtGui.QApplication(args)
win=MainWindow()
win.show()
app.exec_()
if __name__=="__main__":
main(sys.argv)
Офлайн
Спасибо
Офлайн