Ich versuche, eine einfache Chat-Anwendung, mit Steckdosen zu machen, wenn ich eine einfache Sache versucht, macht eine Schleife und hören meine Hostnamen und Port, GUI Einfrieren beginnen würde, und würde überhaupt nicht antworten.PyQt: Fenster nicht mehr reagiert, wenn auf IP hören, Port
Allerdings probierte ich auch eine QTimer()
, da es für PyQt entwickelt wurde, aber es würde ein gleiches Ergebnis bringen und das Fenster einfrieren.
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
Nach jeweils 10
Sekunden (wenn Timeout auftritt), Es beginnt das Fenster einfrieren, was kann das Problem sein? muss ich Prozesse trennen? Gibt es noch eine andere bessere Lösung?
UI und blockierenden Socket-Kommunikation sein, sollte nicht in dem gleichen Thread erfolgen. Wenn der Socket wartet, wird die GUI ebenfalls blockiert. Versuchen Sie es mit einem anderen Thread für die Sockets und kommunizieren Sie mit der GUI über Signal/Slots – SnoozeTime
Danke @SnoozeTime aber ich bin nicht sehr vertraut mit pyqtslot, kann ich ein Beispiel bekommen, wie würde ich es tun? – ShellRox