QListWidget 은 기본적으로 한 줄짜리 입력만 허용한다.
여러줄의 텍스트를 입력하고 싶어 방법을 찾아보았다.
방법
widget을 커스터마이징 하려면 QStyledItemDelegate 를 사용하면 된다.

소스
class TextEditDelegate(QStyledItemDelegate):
def __init__(self, list_widget, *args, **kwargs):
super().__init__(*args, **kwargs)
self.list_widget = list_widget
def createEditor(self, parent, option, index):
editor = QTextEdit(parent)
return editor
def setEditorData(self, editor, index):
if self.list_widget.count() > 0 :
text = index.model().data(index, Qt.EditRole)
editor.setPlainText(text)
def setModelData(self, editor, model, index):
text = editor.toPlainText()
model.setData(index, text, Qt.EditRole)
def updateEditorGeometry(self, editor, option, index):
editor.setGeometry(option.rect)
def sizeHint(self, option, index):
height = self.list_widget.viewport().height() / 3
return QSize(option.rect.width(), height)
MainWindow에는 아래와 같이 setItemDelegate() 해서 연결해줌
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.ui = Ui_MainWindow()
self.ui.setupUi(self)
self.ui.grd_list.setItemDelegate(TextEditDelegate(self.ui.grd_list))
함수
createEditor()
모델의 데이터를 변경하는 데 사용되는 위젯을 반환함. 편집 동작을 사용자 정의하기 위해 다시 구현할 수 있음.setEditorData()
위젯에 조작할 데이터를 제공setModelData()
업데이트된 데이터를 모델에 반환updateEditorGeometry()
편집기가 항목 보기와 관련하여 올바르게 표시되는지 확인sizeHint()
목록 항목에 설정된 크기 힌트를 반환

sizeHint()로 텍스트 데이터가 리스트의 height 1/3을 넘으면 ... 으로 표시되도록 설정
'Python' 카테고리의 다른 글
| pyinstaller 사용시 hidden import not found 에러, collect_all 함수 (0) | 2024.12.23 |
|---|---|
| Pyside6 Qwidget keyEvent 설정 (0) | 2024.12.23 |
| PySide6, Qt Designer 설치 (0) | 2024.12.23 |