티스토리 뷰
전에 알아본 인풋창을 중류별로 만들어봅니다. 코드가 깁니다..
import sys
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *
class lineeditEdit(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
# echo_group
self.echo_group = QGroupBox('가입')
self.echo_label = QLabel('모드')
self.echo_cb = QComboBox()
self.echo_cb.addItem('Normal')
self.echo_cb.addItem('No Join')
self.echo_cb.addItem('Password')
self.echo_cb.addItem('Password Edit')
self.echo_le = QLineEdit()
self.echo_le.setPlaceholderText('초기 텍스트')
self.echo_le.setFocus()
# validaor_group
self.validator_group = QGroupBox('검증')
self.validator_label = QLabel('타입')
self.validator_cb = QComboBox()
self.validator_cb.addItem('선택하지 않음')
self.validator_cb.addItem('정수 검사기')
self.validator_cb.addItem('소수 검사')
self.validator_le = QLineEdit()
self.validator_le.setPlaceholderText('초기 텍스트')
# alignment_group
self.alignment_group = QGroupBox('정렬')
self.alignment_label = QLabel('타입')
self.alignment_cb = QComboBox()
self.alignment_cb.addItem('왼쪽')
self.alignment_cb.addItem('가운데')
self.alignment_cb.addItem('오른쪽')
self.alignment_le = QLineEdit()
self.alignment_le.setPlaceholderText('초기 텍스트')
# input_mask_group
self.input_mask_group = QGroupBox('입력 마스크')
self.input_mask_label = QLabel('타입')
self.input_mask_cb = QComboBox()
self.input_mask_cb.addItem('마스크 없음')
self.input_mask_cb.addItem('전화번호')
self.input_mask_cb.addItem('ISO 데이터')
self.input_mask_cb.addItem('라이센스 키')
self.input_mask_le = QLineEdit()
self.input_mask_le.setPlaceholderText('초기 텍스트')
# access_group
self.access_group = QGroupBox('접근')
self.access_label = QLabel('타입')
self.access_cb = QComboBox()
self.access_cb.addItem('False')
self.access_cb.addItem('True')
self.access_le = QLineEdit()
self.access_le.setPlaceholderText('초기 텍스트')
# actived connect
self.echo_cb.activated.connect(self.echo_changed)
self.validator_cb.activated.connect(self.validator_changed)
self.alignment_cb.activated.connect(self.alignment_changed)
self.input_mask_cb.activated.connect(self.input_mask_changed)
self.access_cb.activated.connect(self.access_changed)
# echo_layout
self.echo_layout = QGridLayout()
self.echo_layout.addWidget(self.echo_label, 0, 0)
self.echo_layout.addWidget(self.echo_cb, 0, 1)
self.echo_layout.addWidget(self.echo_le, 1, 0, 1, 2)
self.echo_group.setLayout(self.echo_layout)
# validator_layout
self.validator_layout = QGridLayout()
self.validator_layout.addWidget(self.validator_label, 0, 0)
self.validator_layout.addWidget(self.validator_cb, 0, 1)
self.validator_layout.addWidget(self.validator_le, 1, 0, 1, 2)
self.validator_group.setLayout(self.validator_layout)
# alignment_layout
self.alignment_layout = QGridLayout()
self.alignment_layout.addWidget(self.alignment_label, 0, 0)
self.alignment_layout.addWidget(self.alignment_cb, 0, 1)
self.alignment_layout.addWidget(self.alignment_le, 1, 0, 1, 2)
self.alignment_group.setLayout(self.alignment_layout)
# input_mask_layout
self.input_mask_layout = QGridLayout()
self.input_mask_layout.addWidget(self.input_mask_label, 0, 0)
self.input_mask_layout.addWidget(self.input_mask_cb, 0, 1)
self.input_mask_layout.addWidget(self.input_mask_le, 1, 0, 1, 2)
self.input_mask_group.setLayout(self.input_mask_layout)
# access_layout
self.access_layout = QGridLayout()
self.access_layout.addWidget(self.access_label, 0, 0)
self.access_layout.addWidget(self.access_cb, 0, 1)
self.access_layout.addWidget(self.access_le, 1, 0, 1, 2)
self.access_group.setLayout(self.access_layout)
# layout
self.layout = QGridLayout()
self.layout.addWidget(self.echo_group, 0, 0)
self.layout.addWidget(self.validator_group, 1, 0)
self.layout.addWidget(self.alignment_group, 2, 0)
self.layout.addWidget(self.input_mask_group, 0, 1)
self.layout.addWidget(self.access_group, 1, 1)
self.setLayout(self.layout)
self.setWindowTitle('통합')
self.show()
def echo_changed(self, index):
if index == 0:
self.echo_le.setEchoMode(QLineEdit.Normal)
elif index == 1:
self.echo_le.setEchoMode(QLineEdit.NoEcho)
elif index == 2:
self.echo_le.setEchoMode(QLineEdit.Password)
elif index == 3:
self.echo_le.setEchoMode(QLineEdit.PasswordEchoOnEdit)
def validator_changed(self, index):
if index == 0:
self.validator_le.setValidator(None)
elif index == 1:
self.validator_le.setValidator(QIntValidator(-99, 99))
elif index == 2:
double_validator = QDoubleValidator(-999.0, 999.0, 2)
double_validator.setNotation(QDoubleValidator.StandardNotation)
self.validator_le.setValidator(double_validator)
self.validator_le.clear()
def alignment_changed(self,index):
if index == 0:
self.alignment_le.setAlignment(Qt.AlignLeft)
elif index == 1:
self.alignment_le.setAlignment(Qt.AlignCenter)
elif index == 2:
self.alignment_le.setAlignment(Qt.AlignRight)
def input_mask_changed(self, index):
if index == 0:
self.input_mask_le.setInputMask('')
elif index == 1:
self.input_mask_le.setInputMask('000-0000-0000')
elif index == 2:
self.input_mask_le.setInputMask('0000-00-00')
self.input_mask_le.setText('20200212')
self.input_mask_le.setCursorPosition(0)
elif index == 3:
self.input_mask_le.setInputMask('>AAAAA-AAAAA-AAAAA-AAAAA;#')
def access_changed(self, index):
if index == 0:
self.access_le.setReadOnly(False)
elif index == 1:
self.access_le.setReadOnly(True)
if __name__ == '__main__':
app = QApplication(sys.argv)
ax = lineeditEdit()
sys.exit(app.exec_())
코드가 길긴 하지만 각 라이에디터별로 그리드와 함수가 적용되어서 그렇습니다. 찬찬히 뜯어보면 그리 어렵진 않지만 오타에 주의해야 합니다.
'IT > PyQt5' 카테고리의 다른 글
[PyQt5] 위젯, 이미지, 크기, 조절 (0) | 2020.02.25 |
---|---|
[PyQt5] 위젯, 진행바, 진행도, 퍼센트 (0) | 2020.02.13 |
[PyQt5] 위젯, 라인, 에디트, 인풋, 텍스트 (0) | 2020.02.12 |
[PyQt5] 위젯, 콤보박스, 리스트, 선택 (0) | 2020.02.12 |
[PyQt5] 위젯, 라디오, 단일, 선택 (0) | 2020.02.12 |
댓글