프로젝트 및 실습/PyQt

[PyQt] Checkbox StateChanged 시그널

jooona 2022. 9. 28. 19:44
반응형

Checkbox에 체크를 하거나 체크를 풀어줄 때 어떤 이벤트를 실행하고 싶다면 stateChanged 시그널을 사용할 수 있습니다.

 

바로 코드를 살펴보겠습니다.

 

import sys
from PyQt5.QtWidgets import QApplication, QWidget, QCheckBox

class MyApp(QWidget):

    def __init__(self):
        super().__init__()

        self.button1 = QCheckBox('Checkbox 1', self)
        self.button2 = QCheckBox('Checkbox 2', self)
        self.button3 = QCheckBox('Checkbox 3', self)
        self.checkbox_example()

    def checkbox_example(self):

	# 버튼 위치 지정
        self.button1.move(20, 20)  # left, top
        self.button2.move(20, 50)
        self.button3.move(20, 80)

	# cb_change 함수와 연결
        self.button1.stateChanged.connect(self.cb_change)
        self.button2.stateChanged.connect(self.cb_change)
        self.button3.stateChanged.connect(self.cb_change)

        self.setWindowTitle('QCheckbox Example')
        self.setGeometry(300, 300, 200, 150)
        self.show()

    def cb_change(self, state):

        if self.sender() == self.button1:
            print("Button1 state change: ", state)
        if self.sender() == self.button2:
            print("Button2 state change: ", state)
        if self.sender() == self.button3:
            print("Button3 state change: ", state)

if __name__ == '__main__':

    app = QApplication(sys.argv)
    exe = MyApp()
    sys.exit(app.exec_())

 

체크박스의 상태가 변화했을 때, stateChanged.connect를 통해 자신이 원하는 함수를 실행시킬 수 있습니다.

 

제가 작성한 코드를 살펴보면 button1, button2, button3의 체크 상태를 변경시키면 자동으로 cb_change()라는 함수를 실행합니다.

 

cb_change 함수에서는 sender() 함수를 통해 어떤 체크박스에서 시그널이 발생되었는지를 확인하고, 해당 체크박스가 실행되었다는 출력을 발생시킵니다.

 

여기서 파라미터로 받아오는 state를 통해 시그널이 발생된 체크박스의 현 상태(바뀌게 된 상태)를 쉽게 확인할 수 있습니다. 

 

* state: 체크박스의 현재 상태

   0: Unchecked

   1: Partially Checked

   2: Checked

 

 

반응형