因此,我正在尝试制作一个模仿TeamViewer的系统。 同时,我制作了一个程序,该程序可以接收连接并允许您上传请求,如果有人希望他可以通过双击该请求来回答您的请求,那么他应该在您的计算机中。
现在在发布请求的客户端视图中,我不知道何时能够获得响应,因此我打开了一个线程,等待接受,并为管理服务器提供了我的IP和端口想要与我联系的人。
发现,由于server_socket.accept()在线程内部以及我放置的self.show()
内部,因此对我来说根本不起作用。
我看不到屏幕本身,并且收到以下消息:
QObject::setParent: Cannot set parent, new parent is in a different thread
众所周知,您不能在其他线程中编辑GUI项,但是我还能如何等待接受套接字然后启动UI来工作。
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以及带有embed的信号,相信我我尝试过。或者我只是不知道如何使用它们(这也是可能的,我也认为我没有像应该那样尝试它们,这对QT还是很新的)
我已经尝试通过拆分不同的类等方式以某种奇怪的方式拆分体系结构。仍在尝试。这可能很难,我很难,请忍受并帮助我。
我正在使用Python 2.7 我的GUI:PYQT-4