티스토리 뷰

Python/PyQt5

PyQt5: QCheckBox 사용하기

editor752 2019. 11. 18. 17:01

이 글은 Codetorial의 PyQt5, 초보자를 위한 Python GUI 프로그래밍-PyQt5 등을 학습하는 과정을 기록한 것이다. 강좌 자체는 해당 사이트를 참고하기 바란다.

QCheckBox은 박스가 있고 해당 박스에 체크 표시를 할 수 있는 위젯이다. 여러 선택지(목록) 가운데에서 원하는 것만 체크하거나 체크된 것을 해제할 수 있게 해 준다. 따라서 QCheckBox는 on(체크됨)/off(체크 안 됨)의 두 상태를 갖는 체크 박스 버튼과 하나의 텍스트 라벨이 함께 짝을 이룬다.

체크 박스가 선택되거나 해제될 때, stateChanged() 시그널을 발생합니다. 체크 박스의 상태가 변할 때마다 어떠한 동작을 발생시키고 싶을 때, 이 시그널을 특정 슬롯에 연결할 수 있습니다. 아래 예제에서는 changeTitle() 메서드(슬롯)이 연결되었다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
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):
        #  show Title이라는 문자열을 가진(보여주는) 체크박스 cb 생성
        cb = QCheckBox('Show Title', self)
        #  체크박스의 위치를 x = 20, y = 20으로 이동
        cb.move(2020)
        #  체크박스의 기본값은 unchecked이기 때문에 체크된 것으로 바꾸기 위해
        cb.toggle()
        #  체크박스의 상태가 바뀔 때마다 changeTitle() 메서드 실행
        cb.stateChanged.connect(self.changeTitle)
 
        self.setWindowTitle('QCheckBox')
        self.setGeometry(300300300200)
        self.show()
 
    #  사용자 정의 메서드
    #  체크작스의 상태가 바뀔 때 발생하는 시그럴 stateChanged에 의해 발생하는 값이 사용자 정의 메서드 changeTitle()의 state 인자로 주어진다.
    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_())
 
cs

실행 결과

이 코드를 QtDesigner를 이용하여 ui를 만들 경우에는 아래와 같이 사용자 메서드인 changeTitle()만을 선언해 주면 된다. QtDesigner 사용법에 익숙하지 않아 개체 속성 등을 하나씩 눌러서 확인해야 하는 번거러움이 있지만 차츰 나아지겠지. 코드에서 정의할 메서드 이름과 ui에서 connect해 놓은 메서드 이름이 같아야 한다는 것은 당연한 상식이겠다. 오타 주의!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
import sys
from PyQt5.QtWidgets import *
from PyQt5.QtCore import Qt
from PyQt5 import uic
 
form_class = uic.loadUiType('QCheckBox.ui')[0]
 
class MyWindow(QWidget, form_class):
 
    def __init__(self):
 
        super().__init__()
        self.setupUi(self)
 
    def changeTitle(self, state):
        if state == Qt.Checked:
            self.setWindowTitle('QCheckBox')
        else:
            self.setWindowTitle(' ')
 
 
if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = MyWindow()
    ex.show()
    sys.exit(app.exec_())
 
cs

ui 파일은 아래에 첨부하였다.

QCheckBox.ui
1.2 kB


'Python > PyQt5' 카테고리의 다른 글

PyQt5: QComboBox 사용하기  (0) 2019.11.20
PyQt5: QRadioButton 사용하기  (0) 2019.11.18
PyQt5: QLabel 사용하기  (0) 2019.11.17
PyQt5: QPushButton 사용법  (0) 2019.11.14
PyQt5: 시간 표시(QTime, QDate, QDateTime)  (0) 2019.11.11
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함
05-18 23:03