모두의 프로그램 - 예제로 배우는 PyQt 프로그래밍

예제 중심으로 배우는 PyQt 프로그래밍

모두의 프로그램 - 예제로 배우는 PyQt 프로그래밍 예제 중심으로 배우는 PyQt 프로그래밍

예제 작성 과정 #2 - 소스 코드에서 시그널 및 슬롯 연결

예제 작성 과정 #1에서 두가지 방법으로 시그널 및 슬롯을 연결해 두었다.

  1. Qt Designer에서 직접 위젯간의 시그널 슬롯 연결
  2. 사용자 정의 슬롯 사용을 위한 슬롯 정의

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의 문구가 바뀌게 된다. 물론 문구가 아닌 다른 작업을 진행할 수 있으니 응용을 해보도록 하자.

댓글

댓글 본문
작성자
비밀번호
  1. 수수리
    encoding이 맞지 않아서 다운될 수 있습니다.
    utf-8로 셋팅해 보세요.
    대화보기
    • 왜 button을 클릭하면 pythonw.exe가 작동이 중지되었습니다. 하고 꺼질까요 ㅠㅠ
    graphittie 자세히 보기