Source code for ted17.f_table
# -*- coding: utf-8 -*-
import PyQt5.QtWidgets as Qw
import PyQt5.QtCore as Qc
from . import dec
from decimal import Decimal as tdec
[docs]class sortWidgetItem(Qw.QTableWidgetItem):
"""
"""
def __init__(self, text, sortKey):
super().__init__(text, Qw.QTableWidgetItem.UserType)
self.sortKey = sortKey
def __lt__(self, other):
return self.sortKey < other.sortKey
[docs]class Table_widget(Qw.QTableWidget):
"""
"""
def __init__(self, labels=[], rows=[[]], parent=None):
super().__init__(parent)
self.setAttribute(Qc.Qt.WA_DeleteOnClose)
self.rows = rows
self.labels = labels
self.parent = parent
# Εδώ ορίζουμε το πλάτος της γραμμής του grid
# self.verticalHeader().setDefaultSectionSize(20)
self.verticalHeader().setStretchLastSection(False)
self.verticalHeader().setVisible(False)
self.setSelectionMode(Qw.QAbstractItemView.SingleSelection)
self.setSelectionBehavior(Qw.QAbstractItemView.SelectRows)
self.setEditTriggers(Qw.QAbstractItemView.NoEditTriggers)
self.setAlternatingRowColors(True)
# self.setStyleSheet("alternate-background-color: rgba(208,246,230);")
self.setSortingEnabled(True)
self.populate()
self.wordWrap()
def _intItem(self, num):
item = Qw.QTableWidgetItem()
# item.setData(QtCore.Qt.DisplayRole, QtCore.QVariant(num))
item.setData(Qc.Qt.DisplayRole, num)
item.setTextAlignment(Qc.Qt.AlignRight | Qc.Qt.AlignVCenter)
return item
def _numItem(self, num):
item = sortWidgetItem(dec.dec2gr(num), num)
item.setTextAlignment(Qc.Qt.AlignRight | Qc.Qt.AlignVCenter)
return item
def _strItem(self, strv):
st = '%s' % strv
if st == 'None':
st = ''
item = Qw.QTableWidgetItem(st)
return item
def _dateItem(self, strv):
strv = '%s' % strv
if len(strv) < 10:
item = sortWidgetItem(strv, strv)
else:
y, m, d = strv.split('-')
item = sortWidgetItem('%s/%s/%s' % (d, m, y), strv)
return item
[docs] def populate(self):
self.setRowCount(len(self.rows))
self.setColumnCount(len(self.labels))
self.setHorizontalHeaderLabels(self.labels)
for i, row in enumerate(self.rows):
for j, col in enumerate(row):
if dec.isNum(col):
if self.labels[j][-2:] == 'id':
self.setItem(i, j, self._intItem(col))
elif type(col) is tdec:
self.setItem(i, j, self._numItem(col))
else:
# self.setItem(i, j, self._numItem(col))
self.setItem(i, j, self._strItem(col))
elif (len(col) == 10) and (col[4] == '-'):
self.setItem(i, j, self._dateItem(col))
else:
self.setItem(i, j, self._strItem(col))
self.resizeColumnsToContents()
[docs]class Form_find(Qw.QDialog):
valselected = Qc.pyqtSignal(str)
def __init__(self, lbls, rws, title, parent=None, selectAndClose=True):
super().__init__(parent)
self.selectAndClose = selectAndClose
self.setAttribute(Qc.Qt.WA_DeleteOnClose)
layout = Qw.QVBoxLayout()
self.tbl = Table_widget(lbls, rws, parent)
self.tbl.cellDoubleClicked.connect(self._setvals)
layout.addWidget(self.tbl)
self.setLayout(layout)
self.setWindowTitle(title)
self.resize(900, 700)
def _setvals(self):
self.vals = []
i = self.tbl.currentRow()
for j in range(self.tbl.columnCount()):
self.vals.append(self.tbl.item(i, j).text())
self.valselected.emit('%s' % self.vals[0])
if self.selectAndClose:
self.accept()
[docs] def keyPressEvent(self, ev):
'''
use enter or return for fast selection nad form close ...
'''
if (ev.key() == Qc.Qt.Key_Enter or
ev.key() == Qc.Qt.Key_Return):
self._setvals()
Qw.QDialog.keyPressEvent(self, ev)