본문 바로가기
프로그래밍/python

PyQt5 QComboBox: 모든 옵션과 사용 방법

by 마루의 일상 2024. 5. 19.
728x90
반응형

 

QComboBox는 드롭다운 리스트를 제공하는 위젯으로, 사용자가 여러 옵션 중 하나를 선택할 수 있도록 합니다. 이번 포스팅에서는 PyQt5의 QComboBox 사용법과 다양한 옵션들을 살펴보겠습니다.

1. QComboBox 기본 사용법

설치

먼저 PyQt5를 설치해야 합니다. 다음 명령어를 사용하여 설치할 수 있습니다.

기본 예제

QComboBox를 사용하는 기본 예제를 살펴보겠습니다.

import sys
from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QComboBox, QLabel

class AppDemo(QWidget):
    def __init__(self):
        super().__init__()
        self.setWindowTitle('QComboBox Example')
        self.resize(300, 200)

        layout = QVBoxLayout()

        self.combo = QComboBox()
        self.combo.addItems(['Option 1', 'Option 2', 'Option 3'])
        self.combo.currentIndexChanged.connect(self.selection_changed)

        self.label = QLabel('Selected: Option 1')

        layout.addWidget(self.combo)
        layout.addWidget(self.label)

        self.setLayout(layout)

    def selection_changed(self, i):
        self.label.setText(f'Selected: {self.combo.itemText(i)}')

app = QApplication(sys.argv)
demo = AppDemo()
demo.show()
sys.exit(app.exec_())

 

이 코드는 간단한 QComboBox 예제를 보여줍니다. 사용자가 옵션을 선택하면 QLabel에 선택된 옵션이 표시됩니다.

2. QComboBox 주요 기능

아이템 추가 및 제거

QComboBox에 아이템을 추가하거나 제거하는 방법입니다.

# 아이템 추가
self.combo.addItem('New Option')
self.combo.addItems(['Option 4', 'Option 5'])

# 아이템 제거
self.combo.removeItem(0)  # 첫 번째 아이템 제거

현재 선택된 아이템 가져오기

current_text = self.combo.currentText()
current_index = self.combo.currentIndex()

아이템 삽입

특정 위치에 아이템을 삽입할 수 있습니다.

self.combo.insertItem(1, 'Inserted Option')

콤보박스 초기화

콤보박스의 모든 아이템을 제거할 수 있습니다.

self.combo.clear()

콤보박스 비활성화 및 활성화

self.combo.setEnabled(False)  # 비활성화
self.combo.setEnabled(True)   # 활성화

3. QComboBox 고급 옵션

Editable QComboBox

사용자가 직접 텍스트를 입력할 수 있도록 하려면 setEditable(True) 메서드를 사용합니다.

self.combo.setEditable(True)

콤보박스 스타일 설정

스타일을 변경하여 콤보박스의 외관을 커스터마이징할 수 있습니다.

self.combo.setStyleSheet("QComboBox { background-color: yellow; }")

콤보박스 신호와 슬롯

QComboBox는 다양한 신호(signal)를 제공합니다. 예를 들어, 사용자가 선택을 변경할 때 발생하는 currentIndexChanged 신호를 사용할 수 있습니다.

self.combo.currentIndexChanged.connect(self.on_combobox_changed)

def on_combobox_changed(self, index):
    print(f'Selected Index: {index}, Text: {self.combo.itemText(index)}')

4. 전체 코드 예제

다양한 기능을 포함한 전체 예제 코드는 다음과 같습니다.

import sys
from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QComboBox, QLabel, QPushButton

class AppDemo(QWidget):
    def __init__(self):
        super().__init__()
        self.setWindowTitle('QComboBox Advanced Example')
        self.resize(300, 200)

        layout = QVBoxLayout()

        self.combo = QComboBox()
        self.combo.addItems(['Option 1', 'Option 2', 'Option 3'])
        self.combo.setEditable(True)
        self.combo.currentIndexChanged.connect(self.selection_changed)
        self.combo.setStyleSheet("QComboBox { background-color: yellow; }")

        self.label = QLabel('Selected: Option 1')

        self.add_button = QPushButton('Add Item')
        self.add_button.clicked.connect(self.add_item)

        self.remove_button = QPushButton('Remove Item')
        self.remove_button.clicked.connect(self.remove_item)

        layout.addWidget(self.combo)
        layout.addWidget(self.label)
        layout.addWidget(self.add_button)
        layout.addWidget(self.remove_button)

        self.setLayout(layout)

    def selection_changed(self, i):
        self.label.setText(f'Selected: {self.combo.itemText(i)}')

    def add_item(self):
        self.combo.addItem('New Option')

    def remove_item(self):
        if self.combo.count() > 0:
            self.combo.removeItem(self.combo.currentIndex())

app = QApplication(sys.argv)
demo = AppDemo()
demo.show()
sys.exit(app.exec_())

 

위 예제는 QComboBox의 다양한 기능을 포함하고 있으며, 사용자 인터페이스에 대한 기본적인 이해를 돕습니다. 이를 통해 PyQt5를 사용한 GUI 애플리케이션 개발에 더욱 익숙해질 수 있을 것입니다.

728x90
반응형