티스토리 뷰
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__()
- class가 QtCore.QObject를 상속해야 한다.
- class초기화시 QtCore.QObject도 초기화해야 한다.
- 클래스 변수로 QtCore.pyqtSignal()로 생성된 signal객체를 가져야 한다.
signal정의시 주의사항으로 클래스 인스턴스 변수로 signal객체를 가지면 된단다는 것이다.
connect하는 방법
start_dialog = StartDialog(dialog)
def slot_print():
print('slot_print')
start_dialog.new_start_signal.connect(slot_print)
- signal의 가지는 클래스의 인스턴스를 가진다.
- 인스턴스의 signal에 connect()로 접근하고 호출된 함수(혹은 시그날)을 매개변수로 전달한다.
emit하는 방법
def new_button_clicked(self):
self.new_start_signal.emit()
emit는 class내부에서 self.시그널객체.emit()
로 발생시킬 수 있다.
'pyqt4' 카테고리의 다른 글
메인위도우에서 다이얼로그를 사용하는 방법 (0) | 2016.06.25 |
---|---|
designer로 만든 ui를 상속받아 사용하는 방법 (1) | 2016.06.25 |
signal과 slot (0) | 2016.06.20 |
pyuic4 -x로 만들어지는 py파일 (0) | 2016.06.20 |
anaconda3.5에서 Qt designer를 이용하는 방법 (0) | 2016.06.19 |
댓글