pyqtSignal의 중복 사용이 불가능 한지 궁금합니다.

조회수 631회

서버와 연결 후에 서버로부터 받은 데이터에 따라 분류 후 해당 메서드로 내용을 보내려고 하는데 pyqtSignal이 Login에서는 잘 되는데 다른 경우는 아예 해당 메서드로 전송이 되지 않습니다. 한 번에 한 개 밖에 못 쓰는건지, 아니면 해당 부분에 무한루프가 존재해야 하는지 궁금합니다.

class Signal(QObject):  
    LoginInfo = pyqtSignal(str) 
    Plant = pyqtSignal(str)
    tagedit = pyqtSignal(str)
class ClientSocket: 

    def __init__(self, parent):
        self.parent = parent
        self.disconn = Signal()
        self.Plant = Plant
        self.disconn.Plant.connect(self.Plant().results) 
        self.tags = Signal()
        self.tagEdit = TagEdit
        self.tags.tagedit.connect(self.tagEdit().tagdelete)
        self.recv = Signal()
        self.Login = LogIn
        self.recv.LoginInfo.connect(self.Login().ConfirmUser)
        self.bConnect = False

    def __del__(self):
        self.stop()

    def connectServer(self, ip, port):
        self.client = socket(AF_INET, SOCK_STREAM)     

        try:
            self.client.connect( (ip, port) ) 
        except Exception as e:
            print('Connect Error : ', e)
            return False
        else:
            self.bConnect = True 
            self.t = Thread(target=self.receive, args=(self.client,)) 
            self.t.start()
            print('Connected')

        return True

    def stop(self):
        self.bConnect = False       
        if hasattr(self, 'client'): 
            self.client.close() 
            del(self.client) 
            print('Client Stop') 

    def receive(self, client):
        while self.bConnect:
            try:
                recv = client.recv(1024)
            except Exception as e: 
                print('Recv() Error :', e)                
                break
            else:
                msg = str(recv, encoding='utf-8') 
                if msg: 
                    msg_return = Result_divide(self, msg)
                    if msg_return == "LoginOK":
                        self.recv.LoginInfo.emit(msg_return) 
                    elif msg_return == "태그 등록 완료":
                        self.tags.tagedit.emit(msg_return)
                    elif msg_return == "Delete":
                        self.tags.tagedit.emit(msg_return)
                    print('[RECV]:', msg_return)

        self.stop()

    def send(self, msg):
        if not self.bConnect:
            return
        try:      
            self.client.send(msg.encode()) 
        except Exception as e:
            print('Send() Error : ', e)
  • pyqtSignal 다중 사용 불가능 했던 원인 찾았습니다. (기록.) self.Plant = Plant self.disconn.Plant.connect(self.Plant().results) 이렇게 하면 안 되고, self.Plant = Plant()로 사용한 뒤에 self.disconn.Plant.connect(self.Plant.results) 로 해야 signal이 전송 됩니다. 반시 2020.2.26 15:22

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)