PyQT 사용자 정의 이벤트 pyqtSignal 예제 > IT 기술백서

1. 일반적인 예

 

[code]

from PyQt5.QtCore import OObject

class MyObject(OObject):

    sig = pyqtSignal(str)

    

    def __init__(self):

        super().__init__()

        

    def execute(self):

        self.sig.emit(‘이벤트가 발생했습니다’)

        

class Main:

    

    def execute(self):

        obj = MyObject()

        obj.sig.connect(self.handler)

        obj.execute()

        

    @pyqtSlot(str)  #이걸 해줘야 한다는데 해주면 에러가 난다.  이유는 아직 모르겠다.

    def handler(self, value):

        print(value)

[/code]

 

2. 상속하지 않고 포함해서 쓰는게 나을 거 같다.  전용 클래스를 하나 만들어 사용한다.

 

event.py

[code]

from PyQt5.QtCore import QObject, pyqtSignal

class Event(QObject):

    __sig = pyqtSignal(str)

    def __init__(self):

        super().__init__()

    def connect(self, reference):

        self.__sig.connect(reference)

    def emit(self, value):

        self.__sig.emit(value)

[/code]

 

example.py

[code]

from event import Event

class Example:

    def __init__(self):

        self.event = Event()

 

    def connect(self, handler):

        self.event.connect(handler)

 

    def execute(self):

        self.event.emit(‘이벤트가 발생되었습니다.’)

[/code] 

 

main.py

[code]

from example import Example

 

class MyWindow(QMainWindow):

    def __init__(self):

        super().__init__()

        self.example = Example()

        self.example.connect(handler)

 

    def handler(self, value):

        print(value)

[/code]

댓글 달기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

위로 스크롤