안녕하세요. 언제나휴일입니다.
이번에는 리스트 위젯을 사용하는 실습을 해 볼게요.
1. 소스 코드
#MainWindow.py
import PyQt5.QtWidgets as qtwid
class MainWindow(qtwid.QMainWindow):
def __init__(self):
super().__init__()
self.te_item = qtwid.QTextEdit(self)
self.btn_add = qtwid.QPushButton("추가",self)
self.lbox_item = qtwid.QListWidget(self)
self.lb_item = qtwid.QLabel("[선택 항목]",self)
self.btn_remove = qtwid.QPushButton("삭제",self)
self.btn_clear = qtwid.QPushButton("Clear",self)
self.Initialize()
def Initialize(self):
self.setWindowTitle("리스트 위젯 사용하기")
self.resize(460,400)
self.te_item.move(20,20)
self.te_item.resize(300,40)
self.btn_add.move(340,20)
self.btn_add.resize(100,40)
self.lbox_item.move(20,80)
self.lbox_item.resize(300,300)
self.lb_item.move(340,80)
self.lb_item.resize(200,40)
self.btn_remove.move(340,140)
self.btn_remove.resize(100,40)
self.btn_remove.setEnabled(False)
self.btn_clear.move(340,200)
self.btn_clear.resize(100,40)
self.btn_add.clicked.connect(self.Btn_addClick)
self.lbox_item.itemSelectionChanged.connect(self.Lbox_itemSelectionChange)
self.btn_remove.clicked.connect(self.Btn_removeClick)
self.btn_clear.clicked.connect(self.Btn_clearClick)
def Btn_addClick(self):
query = self.te_item.toPlainText()
self.te_item.setText("")
self.lbox_item.addItem(query)
def Lbox_itemSelectionChange(self):
item = self.lbox_item.currentItem()
if(item == None):
self.lb_item.setText("[선택 항목]")
self.btn_remove.setEnabled(False)
else:
self.lb_item.setText(item.text())
self.btn_remove.setEnabled(True)
def Btn_removeClick(self):
rn = self.lbox_item.currentRow()
self.lbox_item.takeItem(rn)
def Btn_clearClick(self):
self.lbox_item.clear()
self.Lbox_itemSelectionChange()
#리스트 위젯 사용하기
#Main.py
import sys
import PyQt5.QtWidgets as qtwid
from MainWindow import MainWindow
app = qtwid.QApplication(sys.argv)
mw = MainWindow()
mw.show()
app.exec_()
2. MainWindow 클래스
QT 위젯을 사용하기 위해 모듈을 import합니다.
#MainWindow.py
import PyQt5.QtWidgets as qtwid
MainWIndow 클래스는 QMainWindow를 기반으로 파생 클래스로 정의합니다.
class MainWindow(qtwid.QMainWindow):
2.1 __init__ 메서드
생성자에서는 기반 형식 초기화를 수행합니다.
def __init__(self):
super().__init__()
항목을 추가하기 위한 QTextEdit, 추가 PushButton, 항목을 보여줄 QListWidget, 선택 항목을 보여줄 QLabel, 삭제 및 Clear에 사용할 PushButton을 생성합니다.
self.te_item = qtwid.QTextEdit(self)
self.btn_add = qtwid.QPushButton("추가",self)
self.lbox_item = qtwid.QListWidget(self)
self.lb_item = qtwid.QLabel("[선택 항목]",self)
self.btn_remove = qtwid.QPushButton("삭제",self)
self.btn_clear = qtwid.QPushButton("Clear",self)
자식 위젯을 배치하고 이벤트 핸들러 지정 등은 Initialize 메서드를 만들어서 수행합시다. 이를 호출합니다.
self.Initialize()
2.2 Initailize 메서드
윈도우 타이틀과 크기를 조절합니다.
def Initialize(self):
self.setWindowTitle("리스트 위젯 사용하기")
self.resize(460,400)
자식 위젯들의 위치와 크기를 조절합니다. *삭제 버튼은 비활성화 상태로 지정할게요.*
self.te_item.move(20,20)
self.te_item.resize(300,40)
self.btn_add.move(340,20)
self.btn_add.resize(100,40)
self.lbox_item.move(20,80)
self.lbox_item.resize(300,300)
self.lb_item.move(340,80)
self.lb_item.resize(200,40)
self.btn_remove.move(340,140)
self.btn_remove.resize(100,40)
self.btn_remove.setEnabled(False)
self.btn_clear.move(340,200)
self.btn_clear.resize(100,40)
추가 버튼의 클릭 이벤트 핸들러를 등록합니다.
항목 리스트 위젯의 선택 항목 변경 이벤트 핸들러를 등록합니다.
삭제 버튼과 Clear 버튼의 클릭 이벤트 핸들러를 등록합시다.
self.btn_add.clicked.connect(self.Btn_addClick)
self.lbox_item.itemSelectionChanged.connect(self.Lbox_itemSelectionChange)
self.btn_remove.clicked.connect(self.Btn_removeClick)
self.btn_clear.clicked.connect(self.Btn_clearClick)
2.3 Btn_addClick 메서드
추가할 항목을 입력한 te_item(QTextEdit) 내용을 얻어옵니다.
def Btn_addClick(self):
query = self.te_item.toPlainText()
te_item의 텍스트를 빈 문자열로 설정합니다.
self.te_item.setText("")
항목 리스트 위젯(lbox_item)에 얻어온 문자열을 항목 추가합니다.
self.lbox_item.addItem(query)
2.4 Lbox_itemSelectionChange 메서드
현재 항목을 얻어옵니다.
def Lbox_itemSelectionChange(self):
item = self.lbox_item.currentItem()
현재 항목이 없다면 선택 항목 Label의 텍스트 속성을 지워주고 삭제 버튼을 비활성화 시킵니다.
if(item == None):
self.lb_item.setText("[선택 항목]")
self.btn_remove.setEnabled(False)
항목이 있다면 선택 항목 Label의 텍스트 속성을 항목의 텍스트로 설정합니다. 삭제 버튼은 활성화 시킵니다.
else:
self.lb_item.setText(item.text())
self.btn_remove.setEnabled(True)
2.5 Btn_removeClick 메서드
현재 선택 항목의 Row값을 얻어옵니다.
def Btn_removeClick(self):
rn = self.lbox_item.currentRow()
항목 리스트 박스에서 삭제합니다.
self.lbox_item.takeItem(rn)
2.6 Btn_clearClick 메서드
항목 리스트 위젯을 Clear 시킵니다.
def Btn_clearClick(self):
self.lbox_item.clear()
항목 변경 이벤트 핸들러(Lbox_itemSelectionChange)를 호출합니다.
self.Lbox_itemSelectionChange()
Main.py는 이전 실습과 차이가 없어서 설명을 생략합니다.
이상으로 리스트 위젯을 사용하는 프로그램 실습을 마칠게요.
'Python > QT' 카테고리의 다른 글
[python QT] Button 클릭하면 TextEdit에 입력 내용을 Label에 표시 (0) | 2020.11.19 |
---|---|
[python QT] 마우스 클릭 이벤트 핸들러에서 배경색 토글 (0) | 2020.11.19 |
[python QT] 나의 윈도우 클래스 만들기 (0) | 2020.11.19 |
[python QT] 첫 번째 응용 만들기 (0) | 2020.11.19 |