Здравствуйте, мне нужна помощь. Я пытаюсь показать всплывающее окно, когда получаю определенный тип информации, отправляемой сервером. Проблема в том, что метод получения данных с сервера является Thread, поэтому у меня возникают проблемы с модификацией MainWindow из потока, поэтому я попытался отправить сигнал из потока другому методу в классе User (см. Мой код ниже), поэтому я не изменяю окно из потока. Я получаю следующее сообщение об ошибке:Ошибка отправки сигналов из потока
TypeError: User cannot be converted to PyQt4.QtCore.QObject in this context
Я не знаю, если это правильный путь решения проблемы, поэтому, если есть лучший способ, которым я был бы признателен за вашу помощь, здесь идет код:
class User:
signal1 = QtCore.pyqtSignal()
def __init__(self, usuario):
self.usuario = usuario
self.host = '127.0.0.1'
self.port = 3490
self.user = socket.socket(socket.AF_INET, socket.SOCK_STREAM) #Socket cliente
try:
self.thread_wait_server = threading.Thread(target=self.wait_server)
self.thread_wait_server.start()
except socket.error:
print("No fue posible realizar la conexión")
sys.exit()
self.initUI()
def initUI(self):
app = QtGui.QApplication(sys.argv)
self.login = interfaz.Loggin()
self.login.show()
self.signal1.connect(self.showMain)
self.login.crear.trigger.connect(self.signal)
self.login.trigger1.connect(self.signal2)
app.exec_()
def signal(self):
info = self.login.crear.userPassword()
info1 = pickle.dumps(info)
self.user.sendall(info1)
def signal2(self):
info2 = self.login.comprobar()
info3 = pickle.dumps(info2)
self.user.sendall(info3)
print('sendall')
def wait_server(self):
self.conectar()
def conectar(self):
self.user.connect((self.host, self.port))
self.listener = threading.Thread(target=self.listen, args=())
self.listener.Daemon = True
self.listener.start()
def listen(self):
while True:
data = self.user.recv(1024)
print('received')
print(data)
if data:
info = pickle.loads(data)
if info == 'usuario_valido':
self.signal1.emit()
print('mainshow')
#self.login.exit()
def showMain(self):
self.login.main.show()
не обращайте внимания на сигналы функций, которые они просто отправляют на сервер, проблема заключается в том, что метод прослушивает, когда сервер отправляет обратно информацию, которую должен получить мой пользователь, и что-то делать в этом случае, открывать окно. (Мои виджеты Логгин() и один я хочу показать, устанавливается как атрибут класса Логгина() и его называют основным.
Благодаря
Также не забудьте добавить «__super (User, self) .__ init __() __» сразу после вашего метода init в классе User: – Logic1