我想做一個簡單的聊天應用程序與套接字,當我嘗試了一個簡單的事情,使一個循環,聽我的主機名和端口,GUI將開始凍結,並會根本沒有迴應。PyQt:窗口停止響應時,聽IP,端口
但是,我也試過QTimer()
,因爲它是爲PyQt設計的,但它會帶來相同的結果並凍結窗口。
def startloop(self):
IP = socket.gethostbyname(socket.gethostname())
self.s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
self.s.bind((IP, 5005))
self.loop = QtCore.QTimer(self)
self.loop.timeout.connect(self.check)
self.loop.start(10000)
def recv(self):
data, addr = self.s.data.recvfrom(1024)
print data
每10
秒(發生超時),它開始凍結該窗口後,可問題是什麼呢?我需要分離流程嗎?還有其他更好的解決方案嗎?
UI和阻塞套接字通信不應該在同一個線程中。當套接字等待時,GUI也被阻止。嘗試使用另一個線程的套接字和通過信號/插槽與GUI溝通 – SnoozeTime
謝謝@SnoozeTime但我不是很熟悉pyqtslot,我可以得到一個例子,我會怎麼做呢? – ShellRox