Уведомления

Группа в Telegram: @pythonsu

#1 Дек. 14, 2016 21:20:44

FunNy77
Зарегистрирован: 2016-12-14
Сообщения: 1
Репутация: +  0  -
Профиль   Отправить e-mail  

Потоки ошибка(QObject: Cannot create children for a parent that is in a different thread)

Приветствую всех.
Help. При создании работе потока крашится прога и выводит ошибку

 QObject: Cannot create children for a parent that is in a different thread. 
(Parent is QTextDocument(0x2643330), parent's thread is QThread(0x2355d10), current thread is QThread(0x7f95c0001700)
Код программы
 # -*- coding: utf-8 -*-
from PyQt4.QtCore import *
from PyQt4.QtGui import *
import chat_ui  
import UiSettings3
import sys
import NetWork
import threading  
import time 
PORT = 11902
class MyWindow(QMainWindow):
    def __init__(self, parent=None):
        QMainWindow.__init__(self, parent)
        #  ui-переменная окна приложения. Само окно находится в chat_ui
        self.ui = chat_ui.Ui_MainWindow()
        self.ui.setupUi(self)
        #  ui2-переменная для окна настроек. Находится в UiSettings3
        self.widget = QMainWindow()
        self.ui2 = UiSettings3.Ui_MainWindow()
        self.ui2.setupUi(self.widget)
        # Поток прослушки
        self.tr_ip = threading.Thread( target = self.listenData)
        # self.tr_ip.setDaemon(True)
    
    # Кнопка вызова формы настроек    
    def open_settings(self):
        print("OpenSettings window")
        #  sock-переменная использ. класс для UDP сети. Находится в NetWork
        # self.ui2.lineEdit_3.setText(self.sock.getName())
        # self.ui2.lineEdit_2.setInputMask('999.99.99.999')
        QObject.connect(mainWindow.ui2.pushButton_2, SIGNAL("clicked()"), lambda: self.button_connect())
        self.widget.show()
    
    def listenData(self):
        print("Listen Data")
        self.sock = NetWork.Network()
        # self.ui2.lineEdit_3.setText(self.sock.getName())
        self.sock.connect('',PORT)
        while True:
            data, addr = self.sock.recv()
            if data:
                self.ui.textEdit.setText(addr[0]+": "+data)
            time.sleep(0.1)
    # Кнопка подключения сервера
    def button_connect(self):
        print("Button connect pressed")
        self.tr_ip.start()
    # Функция отправки данных    
    def sendData(self):
        print("----------------------------------------")
        print("Send data")
        data = self.ui.lineEdit.text()
        IP_User = self.ui2.lineEdit_2.text()
        print ("IP to send: "+IP_User)
        self.sock.send(data, IP_User, PORT)
if __name__ == "__main__":
    app = QApplication(sys.argv)
    mainWindow = MyWindow()
    QObject.connect(mainWindow.ui.action, SIGNAL("triggered()"),
                            lambda:  mainWindow.open_settings())
    QObject.connect(mainWindow.ui.pushButton, SIGNAL("clicked()"),
                            lambda:  mainWindow.sendData())
    mainWindow.show()
    sys.exit(app.exec_())

Прошу помочь исправить данную ошибку. Никак не могу понять структуру этих потоков.

Офлайн

#2 Дек. 15, 2016 04:32:55

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10010
Репутация: +  857  -
Профиль   Отправить e-mail  

Потоки ошибка(QObject: Cannot create children for a parent that is in a different thread)

Там надо QThread() использовать.



Офлайн

#3 Дек. 15, 2016 09:47:34

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

Потоки ошибка(QObject: Cannot create children for a parent that is in a different thread)

http://python.su/forum/topic/27194/?page=1#post-145858



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

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version