상세 컨텐츠

본문 제목

[PySide6] QComboBox 사용하기

pyside6

by 빨간눈동자 2021. 9. 9. 16:17

본문

반응형

오늘도 역시나 아래 코드를 살펴보자. 

import sys
from PySide6.QtWidgets import *
from PySide6.QtCore import *
from PySide6.QtGui import *

class combobox(QWidget):
    def __init__(self, parent = None):
        super(combobox, self).__init__(parent)

        layout = QVBoxLayout()
        self.cb = QComboBox()
        self.cb.addItem("1")
        self.cb.addItem("2")
        self.cb.addItems(["3", "4", "5"])
        #self.cb.currentIndexChanged.connect(self.changedItem)
        self.cb. currentTextChanged.connect(self.changedItem)

        self.label = QLabel('Selected number is : 1')

        layout.addWidget(self.cb)
        layout.addWidget(self.label)
        self.setLayout(layout)
        self.setWindowTitle("QCombobox")

    def changedItem(self,i):
        self.label.setText(f'Selected number is : {self.cb.currentText()}')
		
def main():
   app = QApplication(sys.argv)
   ex = combobox()
   ex.show()
   sys.exit(app.exec_())

if __name__ == '__main__':
   main()

위 script를 실행하면 위와 같은 결과를 확인할 수 있다. 

언제나 그랬듯이, Line by Line으로 살펴보도록 하자. 

 

def main():
   app = QApplication(sys.argv)
   ex = combobox()
   ex.show()
   sys.exit(app.exec_())

 

combobox class는 QWidget을 상속받아 구현되었으며, ex.show를 통해 widget을 보여준다. 

 

 

class combobox(QWidget):
    def __init__(self, parent = None):
        super(combobox, self).__init__(parent)

        layout = QVBoxLayout() #------------------ Vertical Layout을 생성한다.
        self.cb = QComboBox()  #------------------ Combobox를 생성하고
        self.cb.addItem("1")   #------------------ 생성된 Combobox에 Item (1) 을 추가한다. 
        self.cb.addItem("2")   #------------------ 생성된 Combobox에 Item (2) 을 추가한다. 
        self.cb.addItems(["3", "4", "5"]) #------- list 형태로 Item을 추가할 수도 있다. 
        
        #-- combobox에 currentIndexChanged(Signal)에 changedItem(slot)을 연결함. 
        # signal 종류는 아래에서 다시 언급하도록 하겠다. 
        #self.cb.currentIndexChanged.connect(self.changedItem) 
        self.cb. currentTextChanged.connect(self.changedItem)

		#-- Label을 생성하고, default로 'Selected number is : 1' 이라는 문구를 출력한다.
        self.label = QLabel('Selected number is : 1')

		# 생성한 combobox 와 label을 vertical layout에 추가한다. 
        layout.addWidget(self.cb)
        layout.addWidget(self.label)
                
        self.setLayout(layout) #-------------- layout를 설장한다. 
        self.setWindowTitle("QCombobox") #---- Widget titl을 설정한다. 

    def changedItem(self,i):
        self.label.setText(f'Selected number is : {self.cb.currentText()}')

 

combobox에서 지원하는 signal 형태는 아래와 같다. 

Signals

void activated(int index)
void currentIndexChanged(int index)
void currentTextChanged(const QString &text)
void editTextChanged(const QString &text)
void highlighted(int index)
void textActivated(const QString &text)
void textHighlighted(const QString &text)

 

currentIndexChanged() 및 currentTextChanged()는 변경이 프로그래밍에 의한 것인지 사용자 상호 작용에 의한 것인지 여부에 관계없이 항상 내보내지는 반면, activate()는 변경이 사용자 상호 작용에 의해 발생한 경우에만 내보내집니다.

사용자가 콤보 상자 팝업 목록에서 항목을 강조(?) 표시하면 Highlighted() 신호가 발생합니다.

 

highlighted() 을 사용하여 위 program을 수정한 후 결과를 살펴보자.

 

      	#self.cb.currentIndexChanged.connect(self.changedItem)
      	#self.cb. currentTextChanged.connect(self.changedItem)
      	self.cb.highlighted.connect(self.changedItem)
          
          
 	def changedItem(self,i):
 		#self.label.setText(f'Selected number is : {self.cb.currentText()} {i}')
        print(f'Selected number is : {self.cb.currentText()} {i}')

 

위와 같이 부분적으로 수정한 후 실행 결과를 살펴보면.. 아래와 같이 출력이 되고 있다. 

* combobox를 select하지 않고 item list 들 위로 mouse를 움직이면 highlight가 변경되며, event가 발생하고 있다. 

 

반응형

'pyside6' 카테고리의 다른 글

[PySide6] Event 다루기  (0) 2021.09.14
[PySide6] QTextBrowser 사용하기  (0) 2021.09.03
[PySide6] QTextEdit 사용하기  (1) 2021.09.03
[PySide6] Style sheet 사용법(WIP)  (0) 2021.09.03
[PySide6] QDockWidget 사용하기  (0) 2021.09.03

관련글 더보기