Поэтому я пытаюсь создать систему, которая должна имитировать TeamViewer.
Тем временем я создал программу, которая получает соединения и позволяет вам загружать запрос, и если кто-то захочет, он может ответить на ваш запрос, дважды щелкнув по нему, и он должен быть на вашем компьютере.
Теперь в представлении клиента, отправившего запрос, я не могу знать, когда смогу получить ответ, поэтому я открыл поток, который будет ожидать принятия, и дал управляющему серверу свой ip и порт для тот, кто захочет соединиться со мной.
Обнаружил, что поскольку server_socket.accept () находится внутри потока, а внутри него я поместил self.show()
, он вообще не работает для меня.
Я не вижу сам экран и получаю следующее сообщение:
QObject::setParent: Cannot set parent, new parent is in a different thread
Общеизвестно, что вы не можете редактировать элементы графического интерфейса в другом потоке, но как еще я могу дождаться принятия сокета и затем запустить пользовательский интерфейс.
def open_server_socket(self):
"""
Creating the server's socket and saving it onto a file.
:return: None
"""
self.run = True
port = self.get_free_tcp_port()
host = gethostbyname(gethostname())
self.address = (host, port)
self.server_socket = socket(AF_INET, SOCK_STREAM)
self.server_socket.bind(self.address)
self.server_socket.listen(1)
self.special_print("Socket bound on IP: " + str(host) + " and port: " + str(port) + ".")
start_new_thread(self.handle_server, ()) #creating a thread to wait for the connection without having to block all my UI.
def handle_server(self):
"""
Responsible to handle all connections of clients.
:return: None
"""
self.client_sock, address = self.server_socket.accept() # Waiting for an accept.
if self.client_sock and self.run:
self.special_print("Connected from: " + str(address))
self.init_controlled_client() # Activating the form.
self.client_handler(address)
def init_controlled_client(self):
"""
Initializes the Controlled mainwindow.
:return: Main Startup Window.
"""
self.events = True
self.show() # << Problem
Теперь некоторые из вас могут сказать, что я должен использовать QThread и передавать сигналы с излучениями, поверьте мне, я пытался. Или я просто не знаю, как их использовать (что также возможно, и я также думаю, что не пробовал их, как должно быть, все еще плохо знаком с QT)
Я пытался каким-то странным образом разделить архитектуры, разделив разные классы и т. Д. До сих пор пытаюсь. Это может быть трудно, я могу быть трудным, терпите меня и помогите мне, пожалуйста.
Я использую Python 2.7
Мой GUI: PYQT-4