QComboBox 위젯

 

 

QComboBox 위젯

 

QComboBox 위젯은 인터넷에서 사용하는 selectbox의 기능과 같다.

 

QComboBox에는 아이콘, 텍스트, 데이터가 인수로 들어간다.

 

그리고 순서는 index로 구분된다.

 

UI file

 

 

 

1. Item 입력

 

QComboBox에 Item을 입력하는 메서드는 addItem()이다. ( icon과 userData는 생략 가능 )

 

addItem(icon, text, userData=None)

 

Item을 입력하는 방법은 다음과 같다.

 

cbox = QComboBox()

cbox.addItem("Sunny", "data s")

cbox.addItem("Cloudy", "data c")

cbox.addItem("Rainy", "data r")

cbox.addItem("Foggy", "data f")

 

addItem은 마지막에 하나씩 추가하는 메서드이다.

만약 기존에 있는 Item 사이에 새로운 Item을 넣고 싶다면 insertItem(index, icon, textuserData=None)를 사용한다.( icon과 userData는 생략 가능 )

 

 

 

2. 현재 Item 받기

 

QComboBox에서 선택된 값은 index, text, data가 있다. 이 세개의 값을 받아오는 메서드는 다음과 같다.

 

currentData()

currentIndex()

currentText()

 

사용법

    index = UI_set.comboBox.currentIndex()
    text = UI_set.comboBox.currentText()
    data = UI_set.comboBox.currentData()

 

 

 

3. Item값이 바뀌었을 때의 이벤트(시그널)

 

QComboBox의 값을 선택했을 때, 이벤트를 처리하기 위해서는 currentIndexChanged 시그널을 이용한다.

 

UI_set.comboBox.currentIndexChanged.connect(checkcombobox)

 

 

 

4. QComboBox의 현재 선택된 Item을 프로그램 코드로 변경하기

 

1) index값으로 변경

UI_set.comboBox.setCurrentIndex(0)

 

2) text 값으로 변경

UI_set.comboBox.setCurrentText('Sunny')

 

 

 

5. Item 삭제

 

QComboBox의 Item을 삭제하기 위해서는 clear(), removeItem(index) 메서드를 사용한다.

 

전체삭제

UI_set.comboBox.clear()

 

 

하나씩 삭제

UI_set.comboBox.removeItem(0)

 

Item의 갯수보다 많은 index를 지정할 때는 삭제가 되지 않는다.

 

Item의 모든 갯수를 추출하려면 count() 메서드를 사용한다.

text를 이용하여 Item의 index를 찾아내려면 findText()를 사용한다.

 

사용법

count = UI_set.comboBox.count()

 

idx = UI_set.comboBox.findText("Foggy")

UI_set.comboBox.removeItem(idx)

 

 

출처 : https://doc.qt.io/qtforpython/PySide2/QtWidgets/QComboBox.html#

 

 

 

전체 코드

import sys
import os
from PySide2 import QtUiTools, QtGui, QtCore
from PySide2.QtWidgets import QApplication, QMainWindow


class MainView(QMainWindow):


    def __init__(self):
        super().__init__()
        self.setupUI()

 

    def etupUI(self):
        global UI_set, cbox

 

        UI_set = QtUiTools.QUiLoader().load(resource_path("datetest.ui"))

 

        UI_set.BTN_check.clicked.connect(checkcalendar)

        UI_set.comboBox.currentIndexChanged.connect(checkcombobox)

 

        # comboBox 아이템 모두 삭제
        UI_set.comboBox.clear()

 

        # Item 추가
        UI_set.comboBox.addItem("Sunny", "data s")
        UI_set.comboBox.addItem("Cloudy", "data c")
        UI_set.comboBox.addItem("Rainy", "data r")
        UI_set.comboBox.addItem("Foggy", "data f")

 

        # comboBox 기본 값 설정

        UI_set.comboBox.setCurrentText('Foggy')

 

        self.setCentralWidget(UI_set)
        self.setWindowTitle("GUI Program Test")
        self.setWindowIcon(QtGui.QPixmap(resource_path("./images/jbmpa.png")))
        self.resize(730, 490)
        self.show()

 

def checkcombobox():
    index = UI_set.comboBox.currentIndex()
    text = UI_set.comboBox.currentText()
    data = UI_set.comboBox.currentData()

 

    UI_set.TE_result.setText(str(index))
    UI_set.TE_result.append(text)
    UI_set.TE_result.append(data)

 

def checkcalendar():

    # 현재 선택된 시간(시스템 시간)을 저장

    date = UI_set.Calendar.selectedDate()
    UI_set.TE_result.setText(date.toString("yyyy-MM-dd"))

 

    # 현재 선택된 시간을 변경, 자동으로 위젯 페이지 변경
    UI_set.Calendar.setSelectedDate(QtCore.QDate(2012, 7, 12))

    #  변경된 시간을 다시 저장
    date = UI_set.Calendar.selectedDate()
    UI_set.TE_result.append(date.toString("yyyy-MM-dd"))

 

    # 달력 위젯 페이지만 변경

    UI_set.Calendar.setCurrentPage(2012, 7)

 

    # 메서드로 년, 월, 일, 요일 출력하기

    UI_set.TE_result.append(str(date))
    UI_set.TE_result.append(str(date.year()))
    UI_set.TE_result.append(str(date.month()))
    UI_set.TE_result.append(str(date.day()))
    UI_set.TE_result.append(str(date.dayOfWeek()))

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


if __name__ == '__main__':
    app = QApplication(sys.argv)
    main = MainView()
    # main.show()
    sys.exit(app.exec_())

 

 

 

 

 

 

출처 :

QComboBox - https://doc.qt.io/qtforpython/PySide2/QtWidgets/QComboBox.html

 

+ Recent posts