Уведомления

Группа в Telegram: @pythonsu

#1 Фев. 8, 2014 15:26:20

xMORRISONx
Зарегистрирован: 2014-02-05
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

PyQt4 - Потоки

Доброго времени суток. Есть код:

    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 на этом примере если не тяжело

Отредактировано xMORRISONx (Фев. 8, 2014 15:32:17)

Офлайн

#2 Фев. 8, 2014 16:32:00

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2757
Репутация: +  184  -
Профиль   Отправить e-mail  

PyQt4 - Потоки

http://python.su/forum/topic/3956/?page=1#post-26424



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Офлайн

#3 Фев. 8, 2014 16:45:20

xMORRISONx
Зарегистрирован: 2014-02-05
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

PyQt4 - Потоки

Rodegast
http://python.su/forum/topic/3956/?page=1#post-26424
То есть, я делаю еще один класс специально для потоков?

Офлайн

#4 Фев. 8, 2014 16:55:25

xMORRISONx
Зарегистрирован: 2014-02-05
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

PyQt4 - Потоки

    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 (Фев. 8, 2014 16:55:54)

Офлайн

#5 Фев. 8, 2014 17:10:58

xMORRISONx
Зарегистрирован: 2014-02-05
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

PyQt4 - Потоки

Если меняю на 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 (Фев. 8, 2014 17:11:23)

Офлайн

#6 Фев. 8, 2014 17:22:29

xMORRISONx
Зарегистрирован: 2014-02-05
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

PyQt4 - Потоки

Если сделать так

        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'

как исправить?

Офлайн

#7 Фев. 8, 2014 18:09:50

xMORRISONx
Зарегистрирован: 2014-02-05
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

PyQt4 - Потоки

Переделал

    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)

Офлайн

#8 Фев. 8, 2014 20:10:57

xMORRISONx
Зарегистрирован: 2014-02-05
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

PyQt4 - Потоки

Вообще не получается в поток кинуть…
есть идеи?

Офлайн

#9 Фев. 11, 2014 12:15:02

plusplus
От:
Зарегистрирован: 2009-01-05
Сообщения: 418
Репутация: +  15  -
Профиль   Отправить e-mail  

PyQt4 - Потоки

xMORRISONx
Вообще не получается в поток кинуть…есть идеи?

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

Будет ли работать как надо - не знаю, но синтаксическая ошибка точно пропадет.



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version