Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | |||
| 5 | 6 | 7 | 8 | 9 | 10 | 11 |
| 12 | 13 | 14 | 15 | 16 | 17 | 18 |
| 19 | 20 | 21 | 22 | 23 | 24 | 25 |
| 26 | 27 | 28 | 29 | 30 |
Tags
- YOLO
- 컴퓨터비전
- MTCNN
- bytetrack
- Vanishing Gradient
- 논문리뷰
- 이미지증강
- opencv설치
- 기울기소실
- OpenCV
- error
- 온디바이스AI
- p-net
- r-net
- opencv템플릿매칭
- AI
- ComputerVision
- easyocr
- adb
- CAN-FD
- ObjectTracking
- pyside6
- 비동기추론
- Classification
- wandb끄기
- yolov8-cls
- o-net
- yolov11
- wandb
- CAN통신
Archives
- Today
- Total
공부저장소
Pyside6 designer사용해서 UI 만들어보기 본문
소개
페이지 전환 연습
페이지1에서 radio박스로 과일 선택하면
페이지2에서 label에 선택된 과일 뜨도록 구현
설치
pip install pyside6
실행
pyside6를 설치하면 pyside6-designer도 같이 설치된다!
pyside6-designer
실행하면 다음과 같이 뜬다
UI구성
- Containers에 Stacked Widget을 끌어서 form 안으로 넣는다.
- 우클릭 -> Insert Page를 눌러 페이지를 추가한다(페이지1,2 생성 완료)
- 페이지1번 안에 label과 button, radio button을 추가하여 다음과 같이 구성한다!
- 페이지2번 안에 label, button을 추가하여 다음과 같이 구성한다.
- ui를 저장한다.
코드 구성
- VScode에 들어가서 ui가 저장된 폴더를 연다
- ui를 파이썬 코드로 변환해주어야한다!
- 터미널을 열고 아래 명령어를 입력하면.py 파일이 생긴다.
pyside6-uic [파일명].ui -o [파일명].py
- .ui, .py파일이 저장된 폴더에 main.py 파일을 생성해준다.
- 라이브러리 세팅
- 먼저 사용할 라이브러리들과 .py파일 속 Ui_From을 불러온다.
import sys from PySide6.QtWidgets import QApplication, QWidget, QMessageBox from PySide6.QtCore import Slot from fruit_ui import Ui_Form
- 메인 화면을 만들어보자!
- Window라는 클래스를 생성 후 실행과 동시에 시작될 코드들을 적어준다.
- self.ui.stackedWidget.setCurrentIndex(0): 초기 화면을 Stacked Widget의 0번 인덱스(=page1)으로 지정한다.
- self.ui.pushButton.clicked.connect(self.page2): 버튼을 눌렀을 때 해당 페이지로 이동하도록 지정해준다.
class Window(QWidget): def __init__(self): super().__init__() self.ui = Ui_Form() self.ui.setupUi(self) self.ui.stackedWidget.setCurrentIndex(0) self.ui.pushButton.clicked.connect(self.page2) self.ui.pushButton_2.clicked.connect(self.page1)
- 페이지2 코드 구현
- page2라는 함수를 만든다.
- radios 변수에 지정한 radiobutton들을 넣어준다.
- 만약 radiobutton 중 하나가 선택되면 select의 값이 선택된 radiobutton의 텍스트로 바뀐다.
- 선택이 안된다면 과일을 선택하라는 알림이 뜬다
- label4에는 select에 저장된 과일로 텍스트가 바뀌고 1번 인덱스(=page2)로 전환된다.
def page2(self): radios = [self.ui.radioButton, self.ui.radioButton_2, self.ui.radioButton_3, self.ui.radioButton_4] select = None for rb in radios: if rb.isChecked(): select = rb.text() break if not select: QMessageBox.information(self, "알림", "과일을 하나 선택해 주세요.") return self.ui.label_4.setText(select) self.ui.stackedWidget.setCurrentIndex(1)
- 페이지1 코드 구현
- 0번 인덱스(=page1)로 전환한다.
def page1(self): self.ui.stackedWidget.setCurrentIndex(0) if __name__ == "__main__": app = QApplication(sys.argv) w = Window() w.show() sys.exit(app.exec())
시연영상
전체 코드
import sys
from PySide6.QtWidgets import QApplication, QWidget, QMessageBox
from PySide6.QtCore import Slot
from fruit_ui import Ui_Form
class Window(QWidget):
def __init__(self):
super().__init__()
self.ui = Ui_Form()
self.ui.setupUi(self)
self.ui.stackedWidget.setCurrentIndex(0)
self.ui.pushButton.clicked.connect(self.page2)
self.ui.pushButton_2.clicked.connect(self.page1)
def page2(self):
radios = [self.ui.radioButton, self.ui.radioButton_2, self.ui.radioButton_3, self.ui.radioButton_4]
select = None
for rb in radios:
if rb.isChecked():
select = rb.text()
break
if not select:
QMessageBox.information(self, "알림", "과일을 하나 선택해 주세요.")
return
self.ui.label_4.setText(select)
self.ui.stackedWidget.setCurrentIndex(1)
def page1(self):
self.ui.stackedWidget.setCurrentIndex(0)
if __name__ == "__main__":
app = QApplication(sys.argv)
w = Window()
w.show()
sys.exit(app.exec())'PYTHON' 카테고리의 다른 글
| OpenCV 템플릿 매칭 (2) | 2025.09.05 |
|---|