Appia의 IT세상

파이썬[Python GUI, PyQt5 Tutorial 013] 한줄 입력 공간 라인에디트(QLineEdit)만들기 - 비밀번호 입력 칸 만들기 본문

Python/Python PyQt5 (GUI)

파이썬[Python GUI, PyQt5 Tutorial 013] 한줄 입력 공간 라인에디트(QLineEdit)만들기 - 비밀번호 입력 칸 만들기

Appia 2020. 6. 27. 07:01
반응형

파이썬[Python GUI, PyQt5 Tutorial 013] 한줄 입력 공간 라인에디트(QLineEdit)만들기 - 비밀번호 입력 칸 만들기

 

이번 포스팅에서는 주로 라인 에디터 부분을 다루어 볼까 합니다. 라인에디터는 흔히 비밀 번호 입력 또는 비밀 번호 생성시에 한줄에 텍스트를 입력할 수 있는 공간입니다. 다음 그림과 같은 부분이라고 볼 수 있습니다. 

라인 에디터의 예 

그럼 관련해서 먼저 간단히 라인에디터(QLineEdit)를 생성하고, 관련해서 텍스트를 입력할 경우 이 부분이 라벨(QLabel)표시 되게 GUI를 구성하여 동작하도록 코딩을 해보도록 하겠습니다. 

 

import sys
 
from PyQt5.QtWidgets import QApplication, QWidget, QLabel,QGridLayout, QLineEdit
 
class QtGUI(QWidget):
 
    def __init__(self):
 
        super().__init__()
 
        self.setWindowTitle("Appia Qt GUI")
 
        self.resize(300300)
 
        self.intialL1 = 'First Job'
 
        self.intialL2 = 'Second Job'
 
        Layout = QGridLayout()
 
        self.setLayout(Layout)
 
        labelobj1 = QLabel(self.intialL1,self)
 
        Layout.addWidget(labelobj1,0,0)
 
        labelobj2 = QLabel(self.intialL2, self)
 
        Layout.addWidget(labelobj2, 10)
 
        lineedit1 = QLineEdit(self)
 
        Layout.addWidget(lineedit1,0,1)
 
        lineedit1.textChanged.connect(lambda:self.print_label(lineedit1,labelobj1))
 
        lineedit2 = QLineEdit(self)
 
        lineedit2.setEchoMode(2)
 
        Layout.addWidget(lineedit2, 11)
 
        lineedit2.textChanged.connect(lambda: self.print_label(lineedit2, labelobj2))
 
 
        self.show()
 
    def print_label(self,lineedit,label):
 
        label.setText(lineedit.text())
 
 
 
if __name__ == '__main__':
 
    app = QApplication(sys.argv)
 
    ex = QtGUI()
 
    app.exec_()
cs

 

위의 코드를 실행하면 다음과 같은 결과가 나타납니다. 

예제 실행결과 

그럼 위의 코드에서 한 부분씩 살펴보도록 하겠습니다. 

 

import sys
 
from PyQt5.QtWidgets import QApplication, QWidget, QLabel,QGridLayout, QLineEdit
cs

앞선 포스팅에서도 이 부분은 가장 많이 사용했습니다. 여기에서는 QLineEdit라는 부분을 호출 하여 사용하기 때문에 관련된 부분을 추가하였습니다. 그리고 그외에 필요로 하는 클래스들을 import 하도록 하기 위함입니다. 

 

        lineedit1 = QLineEdit(self)
        
        #이 부분은 한줄 짜리 입력 공간인 QLineEdit()를 생성합니다. 
 
        Layout.addWidget(lineedit1,0,1)
        
        #그리드 Widget을 활용하여 QLineEdit()을 위치 시킵니다. 
 
        lineedit1.textChanged.connect(lambda:self.print_label(lineedit1,labelobj1))
        
        #linedit1에 텍스트가 입력되면 동작이 될 이벤트를 연결해줍니다. 
 
        lineedit2 = QLineEdit(self)
 
        lineedit2.setEchoMode(2)
        
        #setEchoMode를 통해서 비밀번호같이 외부에 텍스트를 노출시키지 않습니다. 
 
        Layout.addWidget(lineedit2, 11)
 
        lineedit2.textChanged.connect(lambda: self.print_label(lineedit2, labelobj2))
cs

 

위에 코드에 간단히 각각에 하는 역할에 대해서 명시를 했습니다. 여기에서 SetEchoMode의 경우 텍스트를 표현하는 방식을 의미합니다. 

텍스트 Enum 값 설명
QLineEdit.Normal 0 입력된 문자 표시(Default)
QLineEdit.NoEcho 1 아무 표시 하지 않음. 
QLineEdit.Password 2 비밀번호 입력용 비노출 문자로 표시
QLineEdit.PasswordEchoOnEdit 3 입력할 때 문자를 표시하고, 입력 이후 비밀번호 입력용 비노출 문자로 표시 

 

    def print_label(self,lineedit,label):
 
        label.setText(lineedit.text())
cs

그리고 다음 함수를 통해서 QLineEdit에 글자가 입력될 경우, 라벨에 바로바로 표시하게 해줍니다. 

 

관련해서 자주 사용되는 이벤트는 다음과 같습니다. 

event 설명
editingFinished (Enter)키가 눌러졌을때 
returnPressed
textChanged 텍스트가 변경되거나, 수정될 때 이벤트가 동작됩니다. 위에 2 신호는 크게 유사합니다. 
textEdited

 

위와 같은 이벤트를 다음 코드 부분에 적용해서 사용하시면 됩니다. 

lineedit1.textChanged.connect(lambda:self.print_label(lineedit1,labelobj1))
cs

위에 보이는 textChanged 대신 상기 언급해드린 이벤트를 적용하시면 원하시는 이벤트 효과를 확인하실 수 있습니다. 위에 코드 부분을 참조하시고, 혹시 제 코드를 그대로 가져다 쓰시고 싶으신 분이 있으시면 다음 파일을 참조하시길 바랍니다. 

QT_Tutorial_014.py
0.00MB

 

이번 포스팅에서는 파이썬[Python GUI, PyQt5 Tutorial 013] 한줄 입력 공간 라인에디트(QLinEdit)만들기 - 비밀번호 입력 칸 만들기라는 주제로 포스팅을 진행해봤습니다. 이 부분과 몇가지 부분을 결합해서 ToDo리스트를 만들어 보는 것도 매우 재미 있는 것 같습니다. 

 

혹시 궁금하신 점이나 문의 사항이 있으시면 언제든지 댓글 및 방명록에 글 남겨주시길 바랍니다. 감사합니다. 

반응형
Comments