Я новичок в 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) Правильна ли моя реализация изменения метки?