본문 바로가기
Python Library/PySide

[PySide] 위젯 (QComboBox, QListWidget) (3)

by goatlab 2022. 6. 13.
728x90
반응형
SMALL

QComboBox

 

QComboBox는 드롭다운 목록으로, 기본적으로 열 때 화살표로 닫혀 있다. 목록에서 단일 항목을 선택할 수 있으며 현재 선택한 항목이 위젯에 레이블로 표시된다. 콤보 상자는 긴 옵션 목록에서 선택하는 데 적합하다.

 

문자열 목록을 addItems()에 전달하여 QComboBox에 항목을 추가할 수 있다. 항목은 제공된 순서대로 추가된다.

 

class MainWindow(QMainWindow):
    def __init__(self):
        super(MainWindow, self).__init__()

        self.setWindowTitle("My App")

        widget = QComboBox()
        widget.addItems(["One", "Two", "Three"])

        # The default signal from currentIndexChanged sends the index
        widget.currentIndexChanged.connect(self.index_changed)

        # The same signal can send a text string
        widget.currentTextChanged.connect(self.text_changed)

        self.setCentralWidget(widget)

    def index_changed(self, i): # i is an int
        print(i)

    def text_changed(self, s): # s is a str
        print(s)

 

현재 선택한 항목이 업데이트되면 currentIndexChanged 신호가 트리거되며 기본적으로 목록에서 선택한 항목의 인덱스를 전달한다. 현재 선택된 항목의 레이블을 대신 제공 하는 currentTextChanged 신호도 있는데, 이는 종종 더 유용하다.

 

또한, QComboBox는 편집 가능하여 사용자가 현재 목록에 없는 값을 입력하고 삽입하거나 단순히 값으로 사용할 수 있다. 상자를 편집 가능하게 하려면:

 

widget.setEditable(True)

 

삽입을 처리하는 방법을 결정하기 위해 플래그를 설정할 수도 있다. 이러한 플래그는 QComboBox 클래스 자체에 저장되며 아래에 나열된다.

 

 

이를 사용하려면 다음과 같이 플래그를 적용하면 된다.

 

 

widget.setInsertPolicy(QComboBox.InsertAlphabetically)

 

setMaxCount를 사용하여 상자에 허용되는 항목 수를 제한할 수도 있다.

 

widget.setMaxCount(10)

 

QListWidget

 

QListWidget은 QComboBox와 매우 유사하며 주로 사용 가능한 신호가 다르다.

 

class MainWindow(QMainWindow):
    def __init__(self):
        super(MainWindow, self).__init__()

        self.setWindowTitle("My App")

        widget = QListWidget()
        widget.addItems(["One", "Two", "Three"])

        # In QListWidget there are two separate signals for the item, and the str
        widget.currentItemChanged.connect( self.index_changed )
        widget.currentTextChanged.connect( self.text_changed )

        self.setCentralWidget(widget)

    def index_changed(self, i): # Not an index, i is a QListItem
        print(i.text())

    def text_changed(self, s): # s is a str
        print(s)

 

QListWidget (목록 상자의 요소)는 currentItemChanged를 보내는 신호와 텍스트를 보내는 QListItemcurrentTextChanged 신호를 제공한다.

728x90
반응형
LIST

'Python Library > PySide' 카테고리의 다른 글

[PySide] 위젯 (QSlider, QDial) (5)  (0) 2022.06.13
[PySide] 위젯 (QLineEdit, QSpinBox, QDoubleSpinBox) (4)  (0) 2022.06.13
[PySide] 위젯 (QLabel, QCheckBox) (2)  (0) 2022.06.13
[PySide] 위젯 (1)  (0) 2022.06.13
[PySide] Context menus  (0) 2022.06.13