- 전체 소스
더보기
import sys
from PyQt5.QtCore import QSize, Qt
from PyQt5.QtWidgets import QApplication, QMainWindow, QWidget, QGridLayout, QLineEdit, \
QVBoxLayout
class MainScreen(QMainWindow):
def __init__(self, wid, hei):
super().__init__()
self.setWindowTitle("TEST SCREEN") # 프로젝트 타이틀 설정
self.setGeometry(0, 0, int(wid * .5), int(hei * .5)) # 화면 사이즈 설정
self.mainWidget = QWidget() # 메인 위젯 생성
self.mainLayout = QGridLayout(self.mainWidget) # 메인 레이아웃 생성 및 메인 위젯 연결
self.setCentralWidget(self.mainWidget) # 메인윈도우 센트럴위젯에 메인 위젯 연결
# 라인 에디트 생성
self.sample1(0, 0)
# 라인 에디트 크기 지정
self.sample2(0, 1)
# 라인 에디트 텍스트 타이핑 정렬 위치 지정
self.sample3(0, 2)
# 라인 에디트 백그라운드 컬러 설정
self.sample4(1, 0)
# 라인 에디트 힌트(placeholder) 지정
self.sample5(1, 1)
# 라인 에디트 이벤트 (connect) 연결
self.sample6(1, 2)
self.showMaximized()
def sample1(self, row, col):
edt = QLineEdit() # 라인에디트 생성
self.mainLayout.addWidget(edt, row, col) # 메인 레이아웃에 라인에디트 위젯 추가
def sample2(self, row, col):
edt = QLineEdit() # 라인에디트 생성
edt.setFixedWidth(200) # 가로 크기 지정
edt.setFixedHeight(50) # 세로 크기 지정
self.mainLayout.addWidget(edt, row, col) # 메인 레이아웃에 라인에디트 위젯 추가
def sample3(self, row, col):
subLayout = QVBoxLayout()
edt1 = QLineEdit() # 라인에디트 생성
edt2 = QLineEdit() # 라인에디트 생성
edt3 = QLineEdit() # 라인에디트 생성
edt1.setAlignment(Qt.AlignLeft)
edt2.setAlignment(Qt.AlignCenter)
edt3.setAlignment(Qt.AlignRight)
self.mainLayout.addLayout(subLayout, row, col) # 메인 레이아웃에 서브 레이아웃 추가
subLayout.addWidget(edt1) # 서브레이아웃에 라인에디트 추가
subLayout.addWidget(edt2) # 서브레이아웃에 라인에디트 추가
subLayout.addWidget(edt3) # 서브레이아웃에 라인에디트 추가
def sample4(self, row, col):
subLayout = QVBoxLayout()
edt1 = QLineEdit() # 라인에디트 생성
edt2 = QLineEdit() # 라인에디트 생성
edt3 = QLineEdit() # 라인에디트 생성
edt1.setStyleSheet("background-color : red")
edt2.setStyleSheet("background-color : green")
edt3.setStyleSheet("background-color : blue")
self.mainLayout.addLayout(subLayout, row, col) # 메인 레이아웃에 서브 레이아웃 추가
subLayout.addWidget(edt1) # 서브레이아웃에 라인에디트 추가
subLayout.addWidget(edt2) # 서브레이아웃에 라인에디트 추가
subLayout.addWidget(edt3) # 서브레이아웃에 라인에디트 추가
def sample5(self, row, col):
subLayout = QVBoxLayout()
edt1 = QLineEdit() # 라인에디트 생성
edt2 = QLineEdit() # 라인에디트 생성
edt3 = QLineEdit() # 라인에디트 생성
edt1.setPlaceholderText("input name")
edt2.setPlaceholderText("input age")
edt3.setPlaceholderText("input dream")
self.mainLayout.addLayout(subLayout, row, col) # 메인 레이아웃에 서브 레이아웃 추가
subLayout.addWidget(edt1) # 서브레이아웃에 라인에디트 추가
subLayout.addWidget(edt2) # 서브레이아웃에 라인에디트 추가
subLayout.addWidget(edt3) # 서브레이아웃에 라인에디트 추가
def sample6(self, row, col):
subLayout = QVBoxLayout()
self.edt1 = QLineEdit() # 라인에디트 생성
self.edt2 = QLineEdit() # 라인에디트 생성
self.edt1.textChanged.connect(self.textChanged_event) # 텍스트 내용이 바뀔때 마다 self.textChanged_event 함수를 호출
self.mainLayout.addLayout(subLayout, row, col) # 메인 레이아웃에 서브 레이아웃 추가
subLayout.addWidget(self.edt1) # 서브레이아웃에 라인에디트 추가
subLayout.addWidget(self.edt2) # 서브레이아웃에 라인에디트 추가
def textChanged_event(self):
self.edt2.setText(self.edt1.text())
if __name__ == '__main__':
app = QApplication(sys.argv)
size: QSize = app.primaryScreen().size() # 모니터 사이즈
main = MainScreen(size.width()/2, size.height())
sys.exit(app.exec_())
1. 라인 에디트 (QLineEdit) 생성
edt = QLineEdit() # 라인에디트 생성
self.mainLayout.addWidget(edt, row, col) # 메인 레이아웃에 라인에디트 위젯 추가
2. 라인 에디트 (QLineEdit) 크기 지정
edt = QLineEdit() # 라인에디트 생성
edt.setFixedWidth(200) # 가로 크기 지정
edt.setFixedHeight(50) # 세로 크기 지정
self.mainLayout.addWidget(edt, row, col) # 메인 레이아웃에 라인에디트 위젯 추가
3. 라인 에디트 (QLineEdit) 텍스트 타이핑 위치 정렬 지정
subLayout = QVBoxLayout()
edt1 = QLineEdit() # 라인에디트 생성
edt2 = QLineEdit() # 라인에디트 생성
edt3 = QLineEdit() # 라인에디트 생성
edt1.setAlignment(Qt.AlignLeft)
edt2.setAlignment(Qt.AlignCenter)
edt3.setAlignment(Qt.AlignRight)
self.mainLayout.addLayout(subLayout, row, col) # 메인 레이아웃에 서브 레이아웃 추가
subLayout.addWidget(edt1) # 서브레이아웃에 라인에디트 추가
subLayout.addWidget(edt2) # 서브레이아웃에 라인에디트 추가
subLayout.addWidget(edt3) # 서브레이아웃에 라인에디트 추가
4. 라인 에디트 (QLineEdit) 배경 색상 설정
subLayout = QVBoxLayout()
edt1 = QLineEdit() # 라인에디트 생성
edt2 = QLineEdit() # 라인에디트 생성
edt3 = QLineEdit() # 라인에디트 생성
edt1.setStyleSheet("background-color : red")
edt2.setStyleSheet("background-color : green")
edt3.setStyleSheet("background-color : blue")
self.mainLayout.addLayout(subLayout, row, col) # 메인 레이아웃에 서브 레이아웃 추가
subLayout.addWidget(edt1) # 서브레이아웃에 라인에디트 추가
subLayout.addWidget(edt2) # 서브레이아웃에 라인에디트 추가
subLayout.addWidget(edt3) # 서브레이아웃에 라인에디트 추가
5. 라인 에디트 (QLineEdit) 힌트- placeholder 지정
subLayout = QVBoxLayout()
edt1 = QLineEdit() # 라인에디트 생성
edt2 = QLineEdit() # 라인에디트 생성
edt3 = QLineEdit() # 라인에디트 생성
edt1.setPlaceholderText("input name")
edt2.setPlaceholderText("input age")
edt3.setPlaceholderText("input dream")
self.mainLayout.addLayout(subLayout, row, col) # 메인 레이아웃에 서브 레이아웃 추가
subLayout.addWidget(edt1) # 서브레이아웃에 라인에디트 추가
subLayout.addWidget(edt2) # 서브레이아웃에 라인에디트 추가
subLayout.addWidget(edt3) # 서브레이아웃에 라인에디트 추가
6. 라인 에디트 (QLineEdit) 이벤트 - connect 연결
def sample6(self, row, col):
subLayout = QVBoxLayout()
self.edt1 = QLineEdit() # 라인에디트 생성
self.edt2 = QLineEdit() # 라인에디트 생성
self.edt1.textChanged.connect(self.textChanged_event) # 텍스트 내용이 바뀔때 마다 self.textChanged_event 함수를 호출
self.mainLayout.addLayout(subLayout, row, col) # 메인 레이아웃에 서브 레이아웃 추가
subLayout.addWidget(self.edt1) # 서브레이아웃에 라인에디트 추가
subLayout.addWidget(self.edt2) # 서브레이아웃에 라인에디트 추가
def textChanged_event(self):
self.edt2.setText(self.edt1.text())
간략하게 설명드리면 edt1 에 텍스트를 입력하면 자동으로 textChanged 함수가 호출 됩니다.
여기서 포인트는 textChanged.connect 입니다.
connect 의 쓰임은 textChanged 가 호출될때 같이 호출해줄 함수가 있다면 connect 함수를 통해서 연결을 해줍니다.
그래서 흐름을 보자면...
edt1 에 텍스트가 입력되면 텍스트의 변화를 감지해서 textChanged 함수가 호출 됩니다.
textChanged 함수가 호출되면서 connect 함수로 연결된 함수가 있는지 확인합니다.
textChanged_event 함수가 연결된 것을 확인하고 textChanged_event 함수를 호출 해줍니다.
self.edt2.setText(self.edt1.text()) 가 실행되며 edt1의 텍스트 내용이 edt2에 입력됩니다.
'PYQT5' 카테고리의 다른 글
[파이썬, PYQT5] QTableWidget 생성, 항목 설정, 자동 줄 간격, 데이터 추가, 삭제, 정렬 하는 법 (0) | 2022.07.03 |
---|---|
[파이썬, PYQT5] QPushButton 생성 및 click 했을때 connect 함수 연결 (0) | 2022.06.11 |
[파이썬, PYQT5] QTabWidget 생성 및 QWidget 추가 하기 (0) | 2022.06.06 |