본문 바로가기

프로그래밍/PyQt5 GUI

17. QCheckBox

QCheckBox 위젯은 on(선택)/off(해제) 의 두 상태를 갖는 버튼입니다. (QCheckBox 공식 문서) 참고

setTristate() 메서드를 사용하여 '변경 없음(no change)' 상태를 가질 수 있습니다.

checkState() 메서드를 사용하여 선택/변경 없음/해제 여부에 따라 각각 2/1/0 값을 반환합니다.

ButtonGroup 클래스를 사용하여 상호 베타적인 exclusive/non-exclusive 버튼 그룹을 만들 수 있습니다. exclusive 버튼 그룹은 여러 개 중 하나의 버튼만 선택할 수 있습니다. (QButtonGroup 공식 문서) 참고

QCheckBox 위젯에 자주 쓰이는 메서드와 시그널은 아래 표와 같습니다.

 

자주 쓰이는 메서드

메서드 설명
text() 체크 박스의 라벨 텍스트를 반환합니다.
setText() 체크 박스의 라벨 텍스트를 설정합니다.
isChecked() 체크 박스의 상태를 반환합니다. (True/False)
checkState() 체크 박스의 상태를 반환합니다. (2/1/0)
toggle() 체크 박스의 상태를 변경합니다.

자주 쓰이는 시그널

시그널 설명
pressed() 체크 박스를 누를 때 신호를 발생합니다.
released() 체크 박스에서 땔 때 신호를 발생합니다.
clicked() 체크 박스를 클릭할 때 신호를 발생합니다.
stateChanged() 체크 박스의 상태가 바뀔 때 신호를 발생합니다.

 

17-1 예제: ex16

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

class MyApp(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        cb = QCheckBox('Show title', self)
        cb.move(20, 20)
        cb.toggle()
        cb.stateChanged.connect(self.changeTitle)

        self.setWindowTitle('QCheckBox')
        self.setGeometry(300, 300, 300, 200)
        self.show()

    def changeTitle(self, state):
        if state == Qt.Checked:
            self.setWindowTitle('QCheckBox')
        else:
            self.setWindowTitle('')


if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = MyApp()
    sys.exit(app.exec_())

17-2 설명

체크 박스 상태에 따라 QWidget titlebar에 'QCheckBox' 글자가 나타나고 사라집니다.

cb = QCheckBox('Show title', self)

'Show title' 이라는 텍스트 라벨을 갖는 체크박스를 하나 만듭니다.

cb.toggle()

체크 박스는 기본이 off 상태이므로 on 상태로 바꾸기 위해 toggle() 메서드를 호출합니다.

cb.stateChanged.connect(self.changeTitle)

체크 박스의 상태가 바뀔 때 발생하는 시그널 stateChanged 을 changeTitle 슬롯에 연결한다.

def changeTitle(self, state):
    if state == Qt.Checked:
        self.setWindowTitle('QCheckBox')
    else:
        self.setWindowTitle('')

체크박스의 상태(state)가 changeTitle() 메서드의 매개변수로 주어집니다.

체크가 되었으면 타이틀을 'QCheckBox'로, 그렇지 않으면 빈 문자열로 나타납니다.

17-3 결과

'프로그래밍 > PyQt5 GUI' 카테고리의 다른 글

19. QComboBox  (0) 2021.07.23
18. QRadioButton  (0) 2021.07.23
16. QLabel  (0) 2021.07.23
15. QPushButton  (0) 2021.07.23
14. 그리드 레이아웃  (0) 2021.07.23