예제 작성 과정 #1에서 두가지 방법으로 시그널 및 슬롯을 연결해 두었다.
- Qt Designer에서 직접 위젯간의 시그널 슬롯 연결
- 사용자 정의 슬롯 사용을 위한 슬롯 정의
1번의 경우에는 소스코드를 따로 작성할 필요 없이 완벽하게 각 객체가 이어진다. 현재 예제까지는 ui 파일을 Python 코드로 변환없이 uic 모듈을 사용하여 바로 사용하고 있지만, 결과적으로 ui 파일을 python 파일로 변환해서 살펴보면 시그널 슬롯을 이어주는 소스코드가 들어가 있는걸 확인 할 수 있다.
2벌의 경우에는 사용자 슬롯을 정의해 두었기 때문에 해당 슬롯의 이름을 가진 멤버 함수를 작성해야 한다. 해당 멤버함수가 소스코드에 존재하지 않는다면 에러가 실행시 슬롯이 없다며 에러가 나게 된다.
아래는 예제 작성 과정 #1에서 만든 ui 을 정의한 사용자 정의 슬롯을 작성한 소스코드이다.
# coding: utf-8 import sys from PyQt5 import QtWidgets from PyQt5 import QtGui from PyQt5 import uic from PyQt5 import QtCore from PyQt5.QtCore import pyqtSlot class Form(QtWidgets.QDialog): def __init__(self, parent=None): QtWidgets.QDialog.__init__(self, parent) self.ui = uic.loadUi("ui.ui", self) self.ui.show() @pyqtSlot() def slot_1st(self): self.ui.label.setText("첫번째 버튼") @pyqtSlot() def slot_2nd(self): self.ui.label.setText("두번째 버튼") @pyqtSlot() def slot_3rd(self): self.ui.label.setText("세번째 버튼") if __name__ == '__main__': app = QtWidgets.QApplication(sys.argv) w = Form() sys.exit(app.exec())
이제 각 Push Button을 클릭할 때마다 슬롯에 정의된 바와 같이 Label의 문구가 바뀌게 된다. 물론 문구가 아닌 다른 작업을 진행할 수 있으니 응용을 해보도록 하자.