1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87
| #!/usr/bin/python3
# -*- coding: utf-8 -*-
import sys
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
class Fenetre(QWidget):
class __TableWidgetItem(QTableWidgetItem):
def __init__(self, sortCols, *args, **kwargs):
super().__init__(*args, **kwargs)
self.__sortCols=sortCols
def __lt__(self, other):
return self.__sortCols[self.column()](self.data(Qt.DisplayRole)) < self.__sortCols[self.column()](other.data(Qt.DisplayRole))
# __lt__()
# class __TableWidgetItem
__tabCols=(
{
"calc" : lambda x, row, col: ("val(%d)" % x, x),
"sort" : str,
},
{
"calc" : lambda x, row, col: ("val(%d) * row(%d)" % (x, row), x*row),
"sort" : str,
},
{
"calc" : lambda x, row, col: ("val(%d) * row(%d) + col(%d)" % (x, row, col), x*row+col),
"sort" : int,
},
{
"calc" : lambda x, row, col: ("val(%d) * col(%d)" % (x, col), x*col),
"sort" : int,
},
{
"calc" : lambda x, row, col: ("val(%d) * col(%d) + row(%d)" % (x, col, row), x*col+row),
"sort" : int,
},
)
def __init__(self, rows=10, *args, **kwargs):
super().__init__(*args, **kwargs)
self.resize(600, 300)
self.__tableWidget=QTableWidget(0, len(Fenetre.__tabCols), parent=self) # Ici problème
self.__tableWidget.setSortingEnabled(True)
posit=QVBoxLayout(self)
posit.addWidget(self.__tableWidget, 0)
# Remplissage QTableWidget
self.__sortCols=tuple(x["sort"] for x in Fenetre.__tabCols)
self.__load(rows*2)
self.__load(rows)
# __init__()
# Remplissage table
def __load(self, rows):
self.__tableWidget.clearContents()
self.__tableWidget.setRowCount(rows)
val=0
for row in range(rows):
for col in range(len(Fenetre.__tabCols)):
val+=1
calc=Fenetre.__tabCols[col]["calc"](val, row, col)
item=Fenetre.__TableWidgetItem(self.__sortCols, str(calc[1]))
item.setToolTip(
"(%s = %d), sort=%s" % (
calc[0],
calc[1],
self.__sortCols[col],
)
)
#item.setData(Qt.UserRole, val)
self.__tableWidget.setItem(row, col, item)
# for
# for
# __load()
# class Fenetre
# Programme principal
if __name__ == "__main__":
app=QApplication(sys.argv)
fen=Fenetre(rows=int(sys.argv[1])) if len(sys.argv) > 1 else Fenetre()
fen.show()
sys.exit(app.exec_())
# if |
Partager