본문으로 바로가기
반응형

QLineEdit 는 한 줄 글자를 입력받을 때 쓰는 입력 컨트롤 위젯입니다. 오늘은 QLineEdit 위젯의 시그널에 함수를 연결해서 처리하는 방법을 알아보겠습니다. 두 가지 종류의 시그널을 사용할 것입니다. textChanged returnPress 입니다. textChanged QLineEdit 에 입력이 있을 때 마다 발생하는 시그널입니다. returnPress 는 키보드 Enter 를 누를 때 발생합니다.

 

먼저 위젯 객체를 생성해야 합니다. QtWidgets 에 포함되어 있는 클래스입니다. 다음은 textChanged 시그널에 connect() 를 이용해서 실행함수 change_text() 를 연결합니다.

from PyQt5.QtWidgets import *

# QLineEdit 위젯 생성
self.lineedit = QLineEdit(self)
self.lineedit.textChanged.connect(self.change_text)

 

QLineEdit 에 입력한 값을 표시하기 위한 라벨을 추가합니다. textChanged 시그널이 발생할 때 마다 값을 표시할 수 있도록 구현할 것입니다.

# QLabel 설정
self.label = QLabel(self)
self.label.setGeometry(10, 50, 200, 30)

 

QLineEdit 에 값이 변경될 때 마다 라벨에 값을 반영하기 위해 구현한 change_text 함수의 내용입니다.  textChanged 시그널에 연결한 change_text() 함수는 QLineEdit 에 키보드로 값을 입력할 때 마다 호출합니다. 그래서 QLineEdit 에 있는 값과 QLabel 에 있는 값은 항상 동일합니다.

# 버튼 이벤트 함수
def change_text(self, txt):
    self.label.setText(txt)
    self.label.adjustSize()

 

두 번째 시그널인 returnPressed 을 이용해서 Enter 를 눌렀을 때 QLabel 에 표시하는 기능을 구현하겠습니다. returnPressed 에 연결할 함수는 press_text() 입니다.

# Enter 클릭 
self.lineedit.returnPressed.connect(self.press_text)

 

연결된 함수에서는 바로 아래 라벨에 QLineEdit 입력된 값을 추가하는 기능이 들어가 있습니다.

def press_text(self):
    self.label.setText(self.lineedit.text())
    self.label.adjustSize()

 

전체 소스는 다음과 같습니다. 위에서 이야기한 두 개의 시그널(Signal) 에 연결한 함수의 기능을 모두 포함하고 있습니다. 참고로 textChanged 시그널이 발생할 때 마다 QLabel 에 글을 표현하기 때문에 returnPressed 를 발생시키는 키보드 Enter 를 눌러도 별 다른 변화가 없을 겁니다. 두 시그널 발생에 따른 함수 실행은 모두 정상적으로 동작하는 소스입니다.

#!/usr/bin/env python3
import sys
from PyQt5.QtWidgets import *

class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        # 윈도우 설정
        self.setGeometry(300, 300, 400, 300)  # x, y, w, h
        self.setWindowTitle('Line Edit Example')

        # QLineEdit 위젯 생성
        self.lineedit = QLineEdit(self)
        self.lineedit.textChanged.connect(self.change_text)

        # Enter 클릭
        self.lineedit.returnPressed.connect(self.press_text)
        self.lineedit.setGeometry(10, 10, 200, 30)

        # QLabel 설정
        self.label = QLabel(self)
        self.label.setGeometry(10, 50, 200, 30)


    # 버튼 이벤트 함수
    def change_text(self, txt):
        self.label.setText(txt)
        self.label.adjustSize()

    def press_text(self):
        self.label.setText(self.lineedit.text())
        self.label.adjustSize()


if __name__ == '__main__':
    app = QApplication(sys.argv)
    mainWindow = MainWindow()
    mainWindow.show()
    sys.exit(app.exec_())
반응형