Форум сайта python.su
0
Приветствую всех.
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_())
Офлайн
857
Там надо QThread() использовать.
Офлайн
186
http://python.su/forum/topic/27194/?page=1#post-145858
Офлайн