[임베디드 GUI] QT desinger & 예측기 구현

정재훈·2022년 4월 26일
0

임베디드 GUI

목록 보기
5/7

QT desinger 사용법

파이참에서 venv > Scripts > pysid6-designer.exe를 실행시킵니다.

해당 메세지 뜨면, 하단 클릭 후 실행시키기!

UI 파일 불러오는 2가지 방법

QUiLoader ( ).load 함수

파이참의 저장 경로에 QT designer에서의 ui를 저장시키고, 파이참에서 QUiLoader ( ).load 함수를 통해 ui 파일을 불러올 수 있다.

from PySide6.QtWidgets import *
from PySide6.QtUiTools import *

app = QApplication()
main = QUiLoader().load('hi.ui') # 불러오기

main.show()
app.exec()

QT designer에서 변경 후 저장시 바로 실행해도 정상 작동

ui -> py

터미널창에서 pyside6-uic [ui 파일명] -o [py 파일명 .py] 입력하면, ui파일을 py로 변환시켜준다.

from PySide6.QtWidgets import *
from hi_i import Ui_MainWindow # from [py 파일명] import [py 내부 class 명]

class MyApp(QMainWindow,Ui_MainWindow):   # 여기도 MyApp(arg1, [py 내부 class 명])
    def __init__(self):
        super().__init__()
        self.setupUi(self)

    def main(self):
        pass
app = QApplication()
main = MyApp()
main.show()
app.exec()

를 통해 실행시킵니다.

QT designer에서 변경 후 저장시 바로 실행해도 작동되지 않고, 다시 변환시켜줘야 정상 작동

객체 탐색기

객체 탐색기에서 원하는 객체명으로 바꾸어, 수월하게 코딩을 할 수 있도록 합니다.

QT desinger - Widget

Widget을 추가하여 꾸밀 수 있습니다.
Crtl + R을 통해 미리보기 화면을 볼 수 있습니다.
Siganl / Slot을 통해 이벤트 시그널을 생성할 수 도 있습니다.

QT desinger - Layout

Layout을 쓰면 창 크기에 따라 위젯도 확대되는 Form 제작 가능하다.
임베디드에서 LCD의 해상도는 천자만별이라 범위가 매우 넓다. 따라서, 반응형 도구는 필수적이다.
Qt에서 반응형 GUI 개발 도구를 위한 네 가지 대표적인 Layout
1. VBox Layout : 세로 Layout
2. HBox Layout : 가로 Layout
3. Form Layout : Form 형태의 Layout
4. Grid Layout : 2 차원 격자에 해당하는 위젯

버튼 반응형 수직

위젯들은 보통 반응형이 수평에만 적용된다. 따라서, Vertical Policy를 Fixed -> Minimum or 'Expending'으로 변경해주면 된다.

QT desinger로 예측기 구현

QT desinger을 통해 메뉴 bar, Action, 초기값등도 설정해줄 수 있다.

from PySide6.QtWidgets import *
from predict import Ui_MyWindow
import hashlib

class MyApp(QMainWindow,Ui_MyWindow):
    def __init__(self):
        super().__init__()
        self.setupUi(self)

    def main(self):
        pass
    def clear(self):
        self.textBox1.clear()
        self.textBox2.clear()
        self.spinBox.clear()

    def check(self):
    	# hash 함수 : data를 중복확률이 적은 고유 숫자로 만들며, 통신 암호화 프로토콜에 사용됨
        str1 = self.textBox1.text()
        str2 = self.textBox2.text()
        # IoT / HTTP 프로토콜에 많이 사용되는 sha256
        hashCode1 = hashlib.sha256(str1.encode()).hexdigest() # hexdigest : 16진수 값으로 변경
        hashCode2 = hashlib.sha256(str2.encode()).hexdigest()

		# check 함수
        sum1 = int(hashCode1, 16) + int(hashCode2, 16) # 16진수를 10진수로
        sum2 = self.spinBox.value() * 777 # 
        result = (sum1 + sum2) % 101 # 0 ~ 100 수치로 반환

        msg = QMessageBox()
        msg.setIcon(QMessageBox.Warning) # 경고 아이콘 추가
        msg.setWindowTitle("결과 확인") # 메세지 박스 제목
        msg.setText("운명적으로, "+str(result) + "% 확률로 커플이 됩니다.")
        msg.exec()

    def bye(self):
        self.close()


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

0개의 댓글