[임베디드 GUI] Form Layout & Signal/Slot

정재훈·2022년 4월 25일
0

임베디드 GUI

목록 보기
2/7
post-thumbnail

Signal / Slot

특정이벤트가 발생할 때 , 특정 함수가 호출된다
1. 슬롯은 처리해야 할 시그널을 감시한다
2. 시그널이 발생하면 , 슬롯 함수가 호출 된다

from PySide6.QtWidgets import *

app = QApplication()
win = QWidget()

def gogo():  # 슬롯
    msg = QMessageBox()
    msg.setText("클릭!")
    msg.exec()

btn = QPushButton("클릭하세요",win)
btn.clicked.connect(gogo) # 시그널

win.show()
app.exec()

텍스트 출력 예제

from PySide6.QtWidgets import *

app = QApplication()
win = QWidget()

btn = QPushButton("OK")
lineEdit = QLineEdit()

def gogo():
    msg = QMessageBox()
    msg.setText(lineEdit.text())
    msg.exec()

lay = QVBoxLayout()
lay.addWidget(lineEdit)
lay.addWidget(btn)

win.setLayout(lay)
btn.clicked.connect(gogo)

win.show()
app.exec()

Form Layout

QFormLayout() : Form 형태의 간단한 Layout 이 필요할 때 사용 가능
addRow() : label + 위젯 동시 추가

Form

from PySide6.QtWidgets import *

app = QApplication()
win = QWidget()

form = QFormLayout()

line1 = QLineEdit()
line2 = QLineEdit()

form.addRow("name",line1)
form.addRow("age",line2)

lay = QVBoxLayout()
lay.addLayout(form)

btn = QPushButton("회원가입")
lay.addWidget(btn)

win.setLayout(lay)

win.show()
app.exec()

다수 위젯 추가

from PySide6.QtWidgets import *

app = QApplication()
win = QWidget()

form = QFormLayout()

line1 = QLineEdit()
line2 = QLineEdit()
btn = QPushButton("확인")

lay = QHBoxLayout()
lay.addWidget(line2)
lay.addWidget(btn)

form.addRow("name",line1)
form.addRow("age",lay)

win.setLayout(form)


win.show()
app.exec()

화면에 띄우기 / 띄우지 않기

from PySide6.QtWidgets import *

app = QApplication()
win = QWidget()

btn1 = QPushButton("사라짐",win)
btn2 = QPushButton("나타남",win)
line = QLabel("이름")

def disappear():
    line.setVisible(False)  # 사라지게 한다.

def appear():
    line.setVisible(True) # 나타나게 한다.

lay1 = QHBoxLayout()
lay2 = QVBoxLayout()

lay1.addWidget(btn1)
lay1.addWidget(btn2)
lay2.addLayout(lay1)

lay2.addWidget(line)

win.setLayout(lay2)

btn1.clicked.connect(disappear)
btn2.clicked.connect(appear)

win.show()
app.exec()
profile
여러 방향으로 접근하는 개발자

0개의 댓글