[임베디드 GUI] 파이참 QT 기본 & Box Layout

정재훈·2022년 4월 25일
0

임베디드 GUI

목록 보기
1/7

임베디드 GUI 흐름

2000년대 과거 Embedded 에서는 GUI 가 보편적이지 않았지만, 2020년 현재 , 다양한 가정용 장비 / 산업용에서 GUI 를 흔하게 찾아 볼 수 있다. 보편화 된 HW Interface 가 필요하지만, 아직 통일되지 않았다.

Firmware GUI

대표적인 Firmware 용 GUI Solution
1. ST 사의 TouchGFX : 무료 GUI Solution, ST Chipset 을 써야만 사용 가능 함
2. Embedded Wizard : 개인 사용자에게 무료 , 상용 License 판매
3. SEGGER 의 emWin : 독일의 GUI Solution

Linux GUI

QT란?

Linux에서는 다른 플랫폼으로 Porting 이 자유로운 Qt가 가장 널리 쓰인다. C++기반 GUI Application 개발시 널리 쓰이는 프레임워크입니다.

Qt만 배우면 , Win App / Linux App / Mobile App 모두 제작이 가능하다.

라이센스

qt 라이센스 별 사용가능 기능
1. Commercial : 모든 모듈 및 상업용이지만 유료이다.
2. GPL : 필수적인 모듈을 쓸 수 있지만, 비상업용이다.
3. LGPL : 필수적인 모듈은 거의 못쓰지만, 상업용이다.

파이참에서 Qt 다루기

Python Binding : 다른 언어로 제작된 Library 를 Python 으로 호출할 수 있는 연결 모듈을 뜻함

유명한 Qt Python Binding Set 두 가지
1. PySide : Qt 공식 Framework, LGPL + GPL
2. PyQt : 비공식 , Reference 가 많음 , GPL

Pyside 설치

파이참에서 Settings > Project Interpreter > pyside6 검색하여 설치 버튼 클릭

Run Test

from PySide6.QtWidgets import *

app = QApplication()
w = QWidget()
w.show()
app.exec_()

실행 버튼으로 실행

Hello World 출력

from PySide6.QtWidgets import *

app = QApplication()	

label = QLabel("Hello World") 
label.show()	

app.exec()	

버튼 출력

from PySide6.QtWidgets import *

app = QApplication()

button = QPushButton("클릭")
button.show()

app.exec()

모듈 가져오기

  1. import [모듈]로 전체 모듈 불러올 수 있지만, 항상 [모듈]명을 적어줘야 한다.
  2. From 모듈 import 변수 / 함수로 특정 모듈을 가져온다.

QWidget

Widgets : Qt에서 눈에 보이는 모든 모듈 (컨트롤)
QWidget : 모든 위젯들의 부모이다.

위젯 창 제목 및 사이즈 조절

from PySide6.QtWidgets import *

app = QApplication()

win = QWidget()

# 제목 정하기
win.setWindowTitle("HAHA")
# (0,0)이 좌상 꼭짓점, (400,300)이 우하 꼭짓점 좌표로 시작 지점 및 사이즈 지정 가능
win.setGeometry(0,0,400,300) 

win.show()
app.exec()

응용

from PySide6.QtWidgets import *

class From(QWidget):
    def __init__(self):
        super().__init__()
        self.setGeometry(0,0,400,500)
        self.btn = QPushButton("HI",self)
        self.btn.move(100,200)

    def kfcgogo(self):
        print("HI2")

app = QApplication()

win = From()
win.show() # 위젯에 출력
win.kfcgogo() # 콘솔창에 출력
app.exec()

Box Layout

from PySide6.QtWidgets import *

app = QApplication()
win = QWidget()
layout = QVBoxLayout() # 수직 배치형 박스 생성
# 수평 배치형 : QHBoxLayout
layout.addWidget(QPushButton('TOP')) # 버튼 위젯 추가
layout.addWidget(QPushButton('Bottom')) # 버튼 위젯 추가
win.setLayout(layout) # 부모 Widget에 붙이기

win.show()
app.exec()

응용

from PySide6.QtWidgets import *

app = QApplication()
win = QWidget()

mL = QVBoxLayout()
HL = QHBoxLayout()
BL = QVBoxLayout()

mL.addLayout(HL)
mL.addLayout(BL)

HL.addWidget(QPushButton("ONE"))
HL.addWidget(QPushButton("TWO"))
HL.addWidget(QPushButton("THREE"))

BL.addWidget(QPushButton("ONE"))
BL.addWidget(QPushButton("TWO"))
BL.addWidget(QPushButton("THREE"))

win.setLayout(mL)

win.show()
app.exec()

메세지 박스

from PySide6.QtWidgets import *

app = QApplication()
win = QWidget()

alert = QMessageBox()
alert.setText("HI HI HI")
alert.exec()

win.show()
app.exec()

LineEdit Form

from PySide6.QtWidgets import *

app = QApplication()
win = QWidget()

lay = QHBoxLayout()
lay.addWidget(QListWidget(win)) # win 위젯에 소속되도록 함
lay.addWidget(QPushButton("click",win))

win.setLayout(lay)

win.show()
app.exec()

profile
여러 방향으로 접근하는 개발자

0개의 댓글