콤보박스 위젯 응용

Siwoo Pak·2024년 2월 29일
0
  1. QComboBox UI
  2. 메서드
  • 아이템 입력하기

    addItem(icon, text, userData=None)
    icon, userData는 생략 가능
    ex) cbox = QComboBox()
    cbox.addItem("서울특별시")

  • 아이템 추가하기

    insertItem(index, icon, text, userData=None)

  • 콤보박스에 현재 선택된 아이템 값 받기

    currentIndex(): 현재 선택된 아이템의 인덱스 반환
    currentText(): 현재 선택된 아이템의 텍스트 반환
    currentData(): 현재 선택된 아이템의 데이터 반환

  • 콤보박스의 현재 선택된 값 변경

    setCurrentIndex(숫자): 해당 숫자의 인덱스로 변경
    setCurrentText("경기도")

  • 삭제하기

    전체 삭제: clear()
    한개 삭제: removeItem(해당 인덱스)

  • 전체 개수 추출

    count(): 해당 콤보박스의 아이템 전체 갯수 반환.

  • 이벤트 연결

    currentIndexChanged.connect(func): 콤보박스의 변경 있을 시 해당 함수 실행

  1. 전체 소스 코드
import sys
import os
from PySide6 import QtUiTools, QtGui
from PySide6.QtWidgets import QApplication, QMainWindow

# combobox는 따로 임포트 할 필요없다.


loader = QtUiTools.QUiLoader()


class MainView(QMainWindow):
    def __init__(self):
        super().__init__()
        self.setupUI()

    def setupUI(self):
        global UI_MAIN
        UI_MAIN = loader.load(resource_path("combobox.ui"))

        getCnt()
        UI_MAIN.cb_area.currentIndexChanged.connect(getComboBox)
        UI_MAIN.btn_input.clicked.connect(inputComboBox)
        UI_MAIN.btn_del.clicked.connect(deleteComboBox)
        UI_MAIN.btn_clear.clicked.connect(clearComboBox)
        UI_MAIN.btn_all.clicked.connect(getAll)

        self.setCentralWidget(UI_MAIN)
        self.setWindowTitle("QComboBox")
        self.setWindowIcon(QtGui.QPixmap(resource_path("ani.jpg")))
        self.resize(600, 500)
        self.show()


# 콤보박스 이벤트 발생시
def getComboBox():
    # if UI_MAIN.te_result.toPlainText():
    #     UI_MAIN.te_result.clear()
    idx = UI_MAIN.cb_area.currentIndex()
    text = UI_MAIN.cb_area.currentText()
    data = UI_MAIN.cb_area.currentData()

    UI_MAIN.te_result.append(str(idx) + " " + text + " " + str(data))


# 입력하기
def inputComboBox():
    text = UI_MAIN.le_txt.text()
    data = UI_MAIN.le_data.text()

    UI_MAIN.cb_area.addItem(text, data)
    getCnt()


# 선택삭제
def deleteComboBox():
    idx = UI_MAIN.cb_area.currentIndex()

    UI_MAIN.cb_area.removeItem(idx)
    getCnt()
    getAll()


# 전체 삭제
def clearComboBox():
    UI_MAIN.cb_area.clear()
    getCnt()
    getAll()

# 전체보기
def getAll():
    UI_MAIN.te_result.clear()
    cnt = UI_MAIN.cb_area.count()
    # 현재 선택된 콤보박스의 인덱스가 첫번째인 경우
    if UI_MAIN.cb_area.currentIndex() == 0:
        idx = UI_MAIN.cb_area.currentIndex()
        text = UI_MAIN.cb_area.currentText()
        data = UI_MAIN.cb_area.currentData()
        UI_MAIN.te_result.append(str(idx) + " " + text + " " + str(data))

    for i in range(cnt):
        UI_MAIN.cb_area.setCurrentIndex(i)
        # getComboBox()


# 콤보박스 아이템 전체 갯수
def getCnt():
    cnt = UI_MAIN.cb_area.count()

    UI_MAIN.le_cnt.setText(str(cnt))


# 파일경로
# pyinstaller로 원파일로 압축할때 경로 필요함
def resource_path(rel_path):
    if hasattr(sys, '_MEIPASS'):
        return os.path.join(sys._MEIPASS, rel_path)
    return os.path.join(os.path.abspath("."), rel_path)


if __name__ == '__main__':
    app = QApplication(sys.argv)
    main = MainView()
    # main.show()
    sys.exit(app.exec())
  1. 실행화면
  • 전체보기 버튼 클릭시
  • 선택삭제 버튼 클릭시
  • 전체삭제 버튼 클릭시
  • 입력버튼 클릭시
profile
'하루를 참고 인내하면 열흘을 벌 수 있고 사흘을 참고 견디면 30일을, 30일을 견디면 3년을 벌 수 있다.'

0개의 댓글