Найти - Пользователи
Полная версия: PyQt4 - Потоки
Начало » GUI » PyQt4 - Потоки
1
xMORRISONx
Доброго времени суток. Есть код:
    def main_start(self):
        print "MAIN FUNCTION START"
        th1 = threading.Thread(target=self.clerk, name="Thread_Clerk", args=[])
        print "[MainStart]: *** starting Thread_Clerk ***"
        th1.start()
    def clerk(self):
        number = 0
        total_clerk = self.spinBox.value()
        text_clerk = u""
        print total_clerk
        while number < total_clerk:
            text_clerk+=u"Клерк #"+str(number+1)+u" |\t| Заявка # |\t Время выполнения: \n"
            number+=1
        print text_clerk
        self.change_text1(unicode(text_clerk))
    def change_text1(self, text):
        self.textEdit.setText(unicode(text))

Но при запуске процесса выбивает ошибку:
 QObject: Cannot create children for a parent that is in a different thread.
(Parent is QTextDocument(0x28157f0), patent's thread is QThread(0x1e218e0), ent thread is QThread(0x2815840)

Как исправить?
Я использовал в PyQt4 классе стандартный поток Питона. Может по этому не изменяет текст в форме? Если да, то подскажите как использовать потоки PyQt4 на этом примере если не тяжело
Rodegast
http://python.su/forum/topic/3956/?page=1#post-26424
xMORRISONx
Rodegast
http://python.su/forum/topic/3956/?page=1#post-26424
То есть, я делаю еще один класс специально для потоков?
xMORRISONx
    def main_start(self):
        print "MAIN FUNCTION START"
        self.textEdit.setText(u"Start")
        self.thread = THR()
        self.connect(self.thread, QtCore.SIGNAL("finished()"), self, QtCore.SLOT("threadFinished()")) # приконектился на сигнал завершения потока...
        self.thread.start()
class THR(QtCore.QThread):
    def run(self):
        number = 0
        total_clerk = self.spinBox.value()
        text_clerk = u""
        print total_clerk
        while number < total_clerk:
            text_clerk+=u"| Клерк #"+str(number+1)+u" | Заявка # | Время выполнения: |\n"
            number+=1
        text_clerk = text_clerk.rstrip()
        print text_clerk

Ошибка:
AttributeError: 'Ui_MainWindow' object has no attribute 'connect'

Как исправить?
xMORRISONx
Если меняю на QtCore.QObject,
ну как тут
QtCore.QObject.connect(self.pushButton, QtCore.SIGNAL(_fromUtf8("clicked()")), self.main_start)

то ошибка:
Traceback (most recent call last):
File "", line 204, in main_start
QtCore.QObject.connect(self.thread, QtCore.SIGNAL("finished()"), self, QtCor
e.SLOT("threadFinished()"))
TypeError: arguments did not match any overloaded call:
QObject.connect(QObject, SIGNAL(), QObject, SLOT(), Qt.ConnectionType=Qt.AutoC
onnection): argument 3 has unexpected type 'Ui_MainWindow'
QObject.connect(QObject, SIGNAL(), callable, Qt.ConnectionType=Qt.AutoConnecti
on): argument 3 has unexpected type 'Ui_MainWindow'
QObject.connect(QObject, SIGNAL(), SLOT(), Qt.ConnectionType=Qt.AutoConnection
): argument 2 has unexpected type 'str'
xMORRISONx
Если сделать так
        self.thread = THR("Clark")
        self.connect(self.thread, QtCore.SIGNAL("finished()"), self, QtCore.SLOT("threadFinished()"))
        self.thread.start()
то ошибка:
    self.thread = THR("Clark")
TypeError: QThread(QObject parent=None): argument 1 has unexpected type 'str'

как исправить?
xMORRISONx
Переделал
    def main_start(self):
        print "MAIN FUNCTION START"
        self.textEdit.setText(u"Start")
        self.initializing()
    def initializing(self):
        self.s1 = myQThread(self)
        self.s1.something_ready.connect(self.clerk_add)
        self.s1.start()
    def clerk_add(self):
        number = 0
        total_clerk = self.spinBox.value()
        text_clerk = u""
        print total_clerk
        while number < total_clerk:
            text_clerk+=u"| Клерк #"+str(number+1)+u" | Заявка # | Время выполнения: |\n"
            number+=1
        text_clerk = text_clerk.rstrip()
        print text_clerk
        self.textEdit.setText(text_clerk) 
class myQThread(QtCore.QThread):
    something_ready = QtCore.pyqtSignal(object)
    def __init__(self):
        QtCore.QThread.__init__(self)  
    def run(self):
        some_object = create_something()
        self.something_ready.emit(some_object)
 

Но опять ошибка:
    self.s1 = myQThread(self)
TypeError: __init__() takes exactly 1 argument (2 given)
xMORRISONx
Вообще не получается в поток кинуть…
есть идеи?
plusplus
xMORRISONx
Вообще не получается в поток кинуть…есть идеи?

Методом тыка что ли пытаешься решить задачу?) В ошибке конкретно написано, что ты лишний аргумент передаешь, нужно убрать self:
self.s1 = myQThread()

Будет ли работать как надо - не знаю, но синтаксическая ошибка точно пропадет.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB