Отображение главного окна над текущим главным окном - PullRequest
0 голосов
/ 07 апреля 2019

Поэтому я пытаюсь создать систему, которая должна имитировать 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

...