파이큐티의 라인에디트(Line Edit)는 사용자의 입력을 받는 텍스트필드와 같은 것이다. 사용자 아이디나 패스워드를 입력받을 때 사용하는 입력창이다.

파이큐티는 위젯 클래스가 많기로 유명한데 위젯들의 가지수가 많아도 꼭 필요한 것과 부수적인 것이 있을 것이다.

 

라인에디트는 사용자의 입력을 받는 만큼 주요한 위젯이다. 지난 포스트에서 이야기 한 것 처럼 레이블, 버튼, 라인에디트 이것만 있어도 상당히 많은 응용프로그램을 만들 수 있다. 이 세개로 입력과 출력이 모두 표시가된다.

 

* 콘솔창과 비교하면

 

-> 레이블은 표준출력 (print 함수)

 

-> 라인에디트는 사용자 입력 (input 함수)

 

-> 버튼은 사용자 입력완료 (enter 키)

 

프로그램의 로직만 채워넣으면 콘솔창에서 짜는 프로그램 처럼 똑같이 동작한다. 단지 GUI 환경을 제공해서 사용자는 윈도우 창에서 마우스를 사용할 수 있다는 차이가 있다.

 

 

현재의 프로그래머들중에는 윈도우스러운 GUI 보다 리눅스의 CLI 환경을 더 선호하는 사람이 많다. 무려 1000개의 단축키를 사용하는 텍스트에디터 emacs는 최고의 작업효율을 자랑한다고 한다. 마우스를 쓰지 않고 키보드만 사용하는게 가장 생각의 속도와 비슷하다고 생각하는 소위 고인물들이다.

 

윈도우 적인 GUI 환경은 본래 컴퓨터를 배우지 않은 사람들이 쉽게 사용할 수 있도록 고안된 것이었다. 스티브 잡스가 제록스 사의 아이디어를 가져온 것이고 다시 빌게이츠가 잡스로부터 아이디어를 들고갔다.

(순화한 표현이고 그들은 아이디어를 훔쳤다고 했다가... 결국 둘은 조만장자가 되서 훈훈하게 화해했다고 한다;;;)

 

IT발전의 역사를 돌아보면 GUI 를 왜 배우는지를 말해주고 미래의 UI에 대하여 조금은 영감을 준다.

 

스마트폰 UI

 

 

프로그래머가 CLI 의 장인이 되면 GUI 를 사용하는 프로그래머보다 효율이 좋다는 것이다. 같은 시간을 작업해도 더 많은 코드를 정확하게 만들 수 있다. 물론 작업의 스피드를 우선시하는 것은 그다지 좋은 생각이 아니긴 하다. 아직까지는 설계와 유지보수가 더 중요한 일이다.

emacs에 대하여는 고인물들간에도 호불호가 갈린다.

 

이상적인 프로그램은 한번 제대로 만들면 반영구적으로 사용할 수 있지만 실제 세계에서는 불가능하다. 결함이 있는 소프트웨어도 사람의 힘으로 유지보수하여 운영할 수 있는 반면 완벽에 가까운 시스템도 유지보수의 실수로 쉽게 무너질 수 있다.

 

하지만 미래에 컴퓨팅 환경이 바뀐다면? 지금까지도 수도없이 바뀌고 있는데 앞으로 바뀌지 않는다는것도 이상하다.

 

그렇게 생각하면 GUI 환경은 모든 컴퓨터 사용자에게 효과적인 컴퓨팅 환경이 아니다. 스티브 잡스의 업적은 위대하지만 그는 떠났고 빌 게이츠의 관심은 더 이상 IT 업계만이 아니다. 이제 CLI GUI 를 넘어 새로운 UI가 나오기를 기대한다.

 


그럼 파이큐티의 라인에디트를 만들어보자.

 

라인에디트는 다행히 사용법이 쉽다. 생성과 이벤트 처리기 등록을 한다. 

 

아래 네 줄을 보면 레이블이나 버튼이나 생성하고 폰트적용하고 이벤트 처리기 등록과 레이아웃에 적용하는 과정이 똑같다. 차이가 있다면 라인에디트는 사용자 입력을 위해 비워두는 정도이다.

문자열 매개변수를 주면 기본값으로 삼을 수도 있다.

 

* 리턴키가 입력되었을 때 (return key pressed) 콘솔과 레이블에 출력한다.

 

 

* 출력이 잘 되면 성공이다.

 

 

PyQt5 의 코드를 매번 전체를 올렸는데 윈도우창을 생성하는 코드가 계속 중복문서가 되는 것 같아서 위젯의 경우 전체 소스코드를 깃헙에 올려둔다. 아래 생성코드에서 self 가 들어간 것은 QWidget 을 상속받은 기본 클래스이다. (계속 반복되고 있는 코드다)

 

* 라인 에디트 생성 코드

        self.lineedit = QLineEdit("")
        self.lineedit.setFont(QtGui.QFont('Hack', 20))
        self.lineedit.returnPressed.connect(self.recturn_pressed)
        layout.addWidget(self.lineedit)

 

* 리턴키 눌렀을 때 핸들러

    def recturn_pressed(self):
        print(self.lineedit.text())
        self.label.setText(self.lineedit.text())

 

* 전체 소스코드 (깃헙)

Tutorial/PyQtQLineEdit.py at main · kayken7/Tutorial (github.com)

 


 

* 툴팁 (ToolTip)은 사용자가 마우스를 위젯 위에 올려두었을 때 (hover) 나타나는 위젯이다. 이를 위해 툴팁 위젯을 생성할 필요까진 없고 레이블이나 버튼같은 위젯의 메소드로 사용할 수 있다. 매개변수로 문자열 정도만 넣어주면 된다.

 

GUI 프로그램에서 많이 보는 툴팁이다.

label = QLabel("[ToolTip]")
label.setToolTip("Label ToolTip")
button = Button("ToolTip")
button.setToolTip("Simply ToolTip")

레이블과 버튼 등 위젯의 인스턴스에서 메소드를 호출하면 툴팁위젯이 등록된다.

공유하기

facebook twitter kakaoTalk kakaostory naver band