일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 파이썬3
- 파이썬
- Excel
- 오피스
- Android
- Windows10
- python3
- pyqt5
- pythongui
- 윈도우10
- 문자열
- 깃
- python
- 파워포인트
- git
- 아웃룩
- matlab
- html
- VBA
- windows
- pandas
- Outlook
- 비주얼베이직
- 엑셀
- 안드로이드
- Windows11
- 파이썬GUI
- win32com
- office
- 윈도우11
Appia의 IT세상
파이썬[Python GUI, PyQt5 Tutorial 014] 체크박스(QCheckBox)만들기 - 특정 조건에서 체크박스(QCheckBox) 비활성하기 본문
파이썬[Python GUI, PyQt5 Tutorial 014] 체크박스(QCheckBox)만들기 - 특정 조건에서 체크박스(QCheckBox) 비활성하기
Appia 2020. 6. 28. 07:13파이썬[Python GUI, PyQt5 Tutorial 014] 체크박스(QCheckBox)만들기 -
특정 조건에서 체크박스(QCheckBox) 비활성하기
이번 포스팅은 PyQt5에 체크박스(QCheckBox)에 대해서 살펴보고자 합니다. 흔히 체크박스(QCheckBox)는 다음과 같은 위젯을 체크박스(QCheckBox)라고 합니다.
체크박스(QCheckBox)의 경우 ToDoList 등에서 매우 많이 사용이 됩니다. 그럼 먼저 다음 코드에서 한번 살펴보겠습니다.
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QLabel, QPushButton, QCheckBox
class QtGUI(QWidget):
def __init__(self):
super().__init__()
self.num = 0
self.setWindowTitle("Appia Qt GUI")
self.resize(300, 300)
self.intialL1 = 'First Job'
self.intialL2 = 'Second Job'
self.intialL3 = '3rd Job'
self.qclist = []
qc1 = QCheckBox(self.intialL1 , self)
qc2 = QCheckBox(self.intialL2 , self)
qc3 = QCheckBox(self.intialL3, self)
self.qclist.append(qc1)
self.qclist.append(qc2)
self.qclist.append(qc3)
qc1.clicked.connect(lambda:self.print_cliked(qc1))
qc2.clicked.connect(lambda: self.print_cliked(qc2))
qc3.clicked.connect(lambda: self.print_cliked(qc3))
qc1.move(10,35)
qc2.move(10,75)
qc3.move(10,115)
self.show()
def print_cliked(self, qc):
print(qc.checkState())
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = QtGUI()
app.exec_()
|
cs |
위의 코드를 실행하면 다음과 같은 화면이 나타납니다.
위의 코드에서 몇가지 부분을 설명하도록 하겠습니다.
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QLabel, QPushButton, QCheckBox
|
cs |
여기에서 필요한 모듈들을 Import 합니다. QCheckBox는 이 부분에서 사용되니, import 되야 합니다.
self.qclist = []
qc1 = QCheckBox(self.intialL1 , self)
qc2 = QCheckBox(self.intialL2 , self)
qc3 = QCheckBox(self.intialL3, self)
self.qclist.append(qc1)
self.qclist.append(qc2)
self.qclist.append(qc3)
qc1.clicked.connect(lambda:self.print_cliked(qc1))
qc2.clicked.connect(lambda: self.print_cliked(qc2))
qc3.clicked.connect(lambda: self.print_cliked(qc3))
|
cs |
QCheckBox()을 통해서 체크박스(QCheckBox)를 생서합니다. 여기에서 체크박스(QCheckBox)을 생성하여 하나의 리스트에 apeend하여 관리 하는 것이 향후 이벤트 처리에 좋습니다.
그리고 clicked.connect()를 통해서 체크박스가 클릭되었을 경우에 이벤트 연결을 합니다.
def print_cliked(self, qc):
print(qc.checkState())
|
cs |
체크박스(QCheckBox)을 클릭하였을 경우, 콘솔에 체크박스의 checkState()부분을 출력하게 합니다.
CheckState()의 결과는 다음과 같습니다.
Checked | 2 |
Not Checked | 0 |
이번에는 특정 조건을 두도록 하겠습니다. 특정 조건에서 체크박스(QCheckBox)를 비활성화 하도록 하겠습니다. 일단 3개의 체크박스(QCheckBox)중에 2개가 체크되면 나머지 하나가 비활성화되고, 나머지를 다시 클릭하면 비활성화 된것이 다시 활성화 됩니다.
관련된 기능을 한번 살펴보겠습니다. 여기에 연결된 이벤트 부분만 변경하시면 됩니다.
def print_cliked(self, qc):
print(qc.checkState())
if qc.checkState() == 2:
self.num = self.num + 1
elif qc.checkState() == 0:
self.num = self.num - 1
# 체크박스 조건에 맞게 비활성화
if self.num >= 2:
for i in self.qclist:
if i.checkState() == 0:
i.setEnabled(False)
# 체크박스 조건에 맞게 활성화
else :
for i in self.qclist:
if i.checkState() == 0:
i.setEnabled(True)
|
cs |
일단 체크박스가 체크 된 것에 대해 갯수를 세워야 합니다. 그래서 self.num을 통해서 각 체크 박스가 클릭되고 해제 되면 여기에 맞춰서 1를 추가하거나, 1를 빼주는 형태로 진행이됩니다.
그리고 self.num가 2와 같거나, 동일하면 기존에 저장되어 있는 qclist을 반복하면서 체크 되지 않은 녀석을 비활성화합니다. 앞서서 봤던 부분과 동일하게 setEnabled(False)를 통해서 비활성화 하고, setEnabled(True)으로 다시 활성해 해줍니다.
이와 같은 형태로 로또 생성기를 만들수도 있고, 또 ToDoList를 만들수도 있겠다는 생각을 합니다. 앞으로 다른 부분과 결합하여 차차 다른 부분에 대해서 추가로 설명을 드리고자 합니다.
이번 포스팅은 파이썬[Python GUI, PyQt5 Tutorial 014] 체크박스(QCheckBox)만들기 - 특정 조건에서 체크박스(QCheckBox) 비활성하기라는 주제로 포스팅을 진행했습니다. 혹시 궁금하시거나 문의 사항이 있으시면 언제든지 댓글 및 방명록에 글 남겨 주시길 바랍니다. 감사합니다.