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_())
'파이썬 > PyQt5' 카테고리의 다른 글
파이썬(Python) PyQt5 QMessageBox 구현하기 (0) | 2021.11.02 |
---|---|
파이썬(Python) PyQt5 레이아웃 QGridLayout 구현하기 (0) | 2021.11.02 |
파이썬(Python) PyQt5 QDialog 위젯으로 새창 띄우기 (2) | 2021.11.01 |
파이썬(Python) PyQt5 QStatusBar 구현하기 (0) | 2021.11.01 |
파이썬(Python) PyQt5 QProgressBar 구현하기 (0) | 2021.11.01 |