Приложение аварийно завершает работу, когда сервер сокетов подключается через QThread - PullRequest
0 голосов
/ 05 сентября 2018

Я новичок в pyqt, и мне нужно было создать свой сокет в потоке, отличном от основного интерфейса. Сначала я использовал многопоточность, но она вызывала сбой моего главного окна независимо от того, какой поток запускается. Затем я узнал о QThread, который использовался для замены QLabel из потока, используя сигналы и слоты.

Но в настоящее время это фрагмент моего кода, Conn_BTN подключен к кнопке. 0 печатается, но 1 - 3 и 5 не печатаются, и, как ни странно, 4 печатаются даже до 0, как только запускается приложение.

def Conn_BTN(self): # Called by a QPushButton
            print("0")
            self.thread = QtCore.QThread(self)
            print("1")
            self.thread.started.connect(ServerThread.Socket_Conn)
            print("2")
            self.thread.start()
            print("3")

@QtCore.pyqtSlot(int)
def on_sig_conn_stat(self, stat):
if(stat == 1):
     MainWindow.statusBar.setMessage("Connected") # Changes the status from disconnected to connected
elif(stat == 0):
     MainWindow.statusBar.setMessage("Disconnected")

class ServerThread(QtCore.QObject):
    sig_conn_stat = QtCore.pyqtSignal(int)
    print("4")

    def __init__(self, id: int):
        super().__init__()
        self.__id = id

    @QtCore.pyqtSlot()
    def Socket_Conn(self):

        print("5")
        s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        print('Socket created')
        s.bind(("0.0.0.0", 12345))
        s.listen(5)


        while (i = True):
            app.processEvents()

            c, addr = s.accept()
            print ('Got connection from', addr)
            code_encoded = c.recv(1024)
            code_decoded = code_encoded.decode('utf-8')
            if (code_decoded == "Conn"):
                Print("Connected")
                self.sig_conn_stat.emit(1)
            else:
                print(code_decoded)
            c.close()
        s.close()
        self.sig_conn_stat.emit(0)

Нужна помощь с 2 вещами:

1) Почему мое приложение закрывается без печати 1-3 и почему печатается 4, и это нормально для печати

2) Правильна ли моя реализация изменения метки?

...