Pyside6 QListWidget multiline 입력창 구현

2024. 12. 23. 15:55·Python

QListWidget 은 기본적으로 한 줄짜리 입력만 허용한다.
여러줄의 텍스트를 입력하고 싶어 방법을 찾아보았다.

방법

widget을 커스터마이징 하려면 QStyledItemDelegate 를 사용하면 된다.

  • 참고사이트 :
    https://doc.qt.io/qtforpython-6/PySide6/QtWidgets/QStyledItemDelegate.html

소스

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
'Python' 카테고리의 다른 글
  • pyinstaller 사용시 hidden import not found 에러, collect_all 함수
  • Pyside6 Qwidget keyEvent 설정
  • PySide6, Qt Designer 설치
red9isu
red9isu
  • red9isu
    기록
    red9isu
  • 전체
    오늘
    어제
    • 전체보기 (26)
      • JAVA (3)
      • React (2)
      • Python (4)
      • SQL (2)
      • Cloud (1)
      • Linux (2)
      • CI+CD (2)
      • 자격증 (10)
        • AICE (8)
        • SQLD+P (1)
        • 리눅스마스터 (1)
  • 블로그 메뉴

    • 홈
  • 링크

    • Github
  • 공지사항

  • 인기 글

  • 태그

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
red9isu
Pyside6 QListWidget multiline 입력창 구현
상단으로

티스토리툴바