[Util] QTableWidgetUtils

2021. 5. 6. 18:29·[Framework] - PyQT
from collections import OrderedDict

from qgis.PyQt.QtCore import Qt
from PyQt5.QtWidgets import QTableWidget
from PyQt5.QtWidgets import QTableWidgetItem

from siqms_src.utils.ui_utils import UIUtils


class QTableFormat:
    def __init__(self):
        self._form = OrderedDict()

    def __len__(self):
        return len(self._form)

    def __sub__(self, row: tuple):
        self._form.pop(row)

    def __getitem__(self, key):
        if key in self._form.keys():
            return self._form[key]
        else:
            raise KeyError

    @property
    def form(self):
        return self._form

    def append_by_row(self, row_data: tuple):
        self._form[len(self._form)] = row_data

    def edit_row(self, row: int, row_data: tuple):
        try:
            self._form[row] = row_data
        except KeyError:
            pass

    def delete_row(self, row: int):
        self._form.pop(row)

    def get(self, row: int):
        return self._form.get(row)

    def items(self):
        for r, row_data in self._form.items():
            yield r, row_data

    def keys(self):
        for r in self._form.keys():
            yield r

    def values(self):
        for row_data in self._form.values():
            yield row_data

    def clear(self):
        self._form.clear()


class QTableWidgetUtils:

    @staticmethod
    def set_true_check_boxes_in_column(table_widget: QTableWidget, column: int):
        """
        2021.03.26.hsk : 오류 딕셔너리 확인후 체크박스 체크
        :return:
        """
        for r in range(table_widget.rowCount()):
            widget, checkbox = UIUtils.check_box_aligned_center()
            table_widget.setCellWidget(r, column, widget)
            checkbox.setCheckable(True)
            checkbox.setChecked(True)

    @staticmethod
    def set_false_check_boxes_in_column(table_widget: QTableWidget, column: int):
        """
        2021.03.26.hsk : 오류 딕셔너리 확인후 체크박스 체크
        :return:
        """
        for r in range(table_widget.rowCount()):
            widget, checkbox = UIUtils.check_box_aligned_center()
            table_widget.setCellWidget(r, column, widget)
            checkbox.setCheckable(True)
            checkbox.setChecked(False)

    @classmethod
    def refresh_by_items(cls, table_widget: QTableWidget, display_data: QTableFormat, user_data: QTableFormat = None):
        """
        2021.04.15.hsk : QTableWidget 갱신
        :param table_widget: QTableWidget
        :param display_data: QTableFormat
        ex)
        [0: (1, 2, 3),
         1: (4, 5, 6),
         2: (7, 8, 9)]
        :param user_data: QTableFormat
        display_data 사이즈보다 커야한다.
        채우지 않을 부분은 None 으로 매꾼다.
        ex)
        [0: (None, None, 1),
         1: (None, None, 2),
         2: (None, None, 3)]
        """
        table_widget.setRowCount(0)
        for r, row_datum in display_data.items():
            table_widget.insertRow(r)
            for c, column_datum in enumerate(row_datum):
                item = QTableWidgetItem()
                item.setTextAlignment(Qt.AlignCenter | Qt.AlignVCenter)
                if column_datum and cls._is_string(column_datum):
                    item.setData(Qt.DisplayRole, column_datum)
                    if user_data.get(r)[c]:
                        item.setData(Qt.UserRole, user_data.get(r)[c])
                table_widget.setItem(r, c, item)

    @staticmethod
    def _is_string(num):
        try:
            str(num)
            return True
        except ValueError:
            return False

 

 

 

'[Framework] - PyQT' 카테고리의 다른 글

[Utils] QCheckBoxUtils  (0) 2021.08.04
QSplitter  (0) 2021.05.06
closeEvent  (0) 2020.12.28
'[Framework] - PyQT' 카테고리의 다른 글
  • [Utils] QCheckBoxUtils
  • QSplitter
  • closeEvent
Bebsae
Bebsae
  • Bebsae
    뱁새zip
    Bebsae
  • 전체
    오늘
    어제
    • 분류 전체보기 (108)
      • [DevOps] - Kubernetes (5)
      • [DevOps] - AWS (1)
      • [AI] - Machine Learning (19)
      • [AI] - Neural Network (7)
      • [CS] - Network (2)
      • [CS] - Data Structure (3)
      • [CS] - Design Pattern (6)
      • [Language] - Python (15)
      • [Library] - Numpy (7)
        • Quick Start (5)
        • API (2)
      • [Framework] - Django (3)
      • [Framework] - QGIS (6)
      • [Framework] - PyQT (4)
      • [Mathematics] - Linear Alge.. (14)
      • [Mathematics] - Statistical (2)
      • [ETC] - Python (3)
      • [ETC] - C++ (1)
      • [ETC] - Linux (1)
      • 논문 (5)
      • 회고록 (3)
      • 생산성 (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • 깃허브
  • 공지사항

  • 인기 글

  • 태그

    algebra
    decomposition
    QGIS
    linearalgebra
    Python
    DEEPLEARNING
    파이썬
    머신러닝
    신경망
    Convolution
    Machine
    MachineLearning
    Linear
    교차검증
    디자인패턴
    선형대수
    RNN
    numpy
    분해
    Learning
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Bebsae
[Util] QTableWidgetUtils
상단으로

티스토리툴바