티스토리 뷰

pyqt는 사용자가 정의한 signal을 발생(emit)할 수 있다. emit시 signale에 연결(connect)된 slot을 호출하게 된다. 예제코드는 아래와 같다.

stackoverflow를 참고하였다.


class StartDialog(QtGui.QDialog, QtCore.QObject, Ui_StartDialog):
    new_start_signal = QtCore.pyqtSignal()

    def __init__(self, parent=None):
        QtGui.QDialog.__init__(self, parent)
        QtCore.QObject.__init__(self)
        self.setupUi(parent)

        self.new_button.clicked.connect(self.new_button_clicked)

    def new_button_clicked(self):
        self.new_start_signal.emit()


app = QtGui.QApplication(sys.argv)
start_dialog = StartDialog()

def slot_print():
    print('slot_print')

start_dialog.new_start_signal.connect(slot_print)
start_dialog.show()
sys.exit(app.exec_())

예제코드를 이용하여 핵심내용을 알아보자.

signal을 정의하는 방법

class StartDialog(Ui_StartDialog, QtCore.QObject):
    new_start_signal = QtCore.pyqtSignal()

    def __init__(self, parent):
        super(StartDialog, self).__init__()
  1. class가 QtCore.QObject를 상속해야 한다.
  2. class초기화시 QtCore.QObject도 초기화해야 한다.
  3. 클래스 변수로 QtCore.pyqtSignal()로 생성된 signal객체를 가져야 한다.

signal정의시 주의사항으로 클래스 인스턴스 변수로 signal객체를 가지면 된단다는 것이다.

connect하는 방법


start_dialog = StartDialog(dialog)

def slot_print():
    print('slot_print')

start_dialog.new_start_signal.connect(slot_print)
  1. signal의 가지는 클래스의 인스턴스를 가진다.
  2. 인스턴스의 signal에 connect()로 접근하고 호출된 함수(혹은 시그날)을 매개변수로 전달한다.

emit하는 방법

def new_button_clicked(self):
    self.new_start_signal.emit()

emit는 class내부에서 self.시그널객체.emit()로 발생시킬 수 있다.

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함