-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmyTable.py
More file actions
129 lines (106 loc) · 3.36 KB
/
myTable.py
File metadata and controls
129 lines (106 loc) · 3.36 KB
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
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
#!/usr/bin/env python3
############################################
#### cls_Frm_MyTable.py ####
#### Version 20250506 grid ####
############################################
import tkinter as tk
import myTheme as skin
class TkTable( tk.Frame ):
def __init__(
self,
master = None,
title = "",
colHeaders = [],
data = [] ,
dimensions = [ 400, 400 ]
):
super().__init__(master)
self.master = master
self.grid()
self.configure( background = skin.myBlack )
self.title = title
self.dimensions = dimensions
self.hasTitle = ( len( self.title ) > 2 )
self.colHeaders = colHeaders
self.colHeadersLen = len( self.colHeaders )
self.colSpan = max( 2, self.colHeadersLen )
self.colWidths = [ int( self.dimensions[0] / 2.66 ), int( self.dimensions[0] / 1.6 ),100,100,100,100,100,100 ]
self.colSticky = [ "e", "w" ,"e", "e", "e", "e" ]
self.tkTableData = data
self.tkTableDataLen = len( self.tkTableData )
self.firstDataRow = 0
# Main container frame
self.tkTable = tk.Frame(
self,
bg = skin.myBlack,
width = int( self.dimensions[0] * 0.975 ),
height = int( self.dimensions[1] * 0.975 )
)
"""
print(
f"myTkTable called with dimensions: { dimensions }\n" +
f"title: { self.hasTitle } ({self.title})\n" +
f"headers: {self.colHeadersLen }\n" +
f"self.tkTableDataLen: {self.tkTableDataLen}"
)
"""
self.doLayout()
def doLayout( self ):
# Row 0 Title
if self.hasTitle:
self.lbl_title = tk.Label(
self.tkTable,
text = self.title,
bg = skin.myWhite,
fg = skin.myBlack,
font = skin.provideFont(20)
)
self.lbl_title.grid(
row = 0,
column = 0,
columnspan = self.colSpan,
sticky = 'WE'
)
self.firstDataRow = 1
# print(f"self.firstDataRow After Tilte = {self.firstDataRow}")
# Row 1 Column labels if provided
if ( len( self.colHeaders ) > 0 ):
# print(f"Adding colHeaders: { str( self.colHeaders ) }")
for h, hdrText in enumerate( self.colHeaders ):
hdr = tk.Label(
self.tkTable,
text= str( self.colHeaders[h] ),
bg = skin.myBlack,
fg = skin.myNBlue,
borderwidth = 1,
# width = self.colWidths[h],
font = skin.provideFont("H")
)
hdr.grid( row = self.firstDataRow, column = h )
self.firstDataRow += 1
# print(f"self.firstDataRow After colHeaders = { self.firstDataRow }")
# Table data
if self.tkTableDataLen > 0 :
# print(f"self.tkTableData:{self.tkTableData} | self.tkTableData[0]:{ self.tkTableData[0] }")
if self.tkTableData[0] == "No data":
print("Empty table")
else:
for r, dataRow in enumerate( self.tkTableData ):
# print(f"This data row {r} has { len(dataRow) } items")
curFrmRow = r + self.firstDataRow
# print(f"DATA curRow = {curFrmRow} | r={r} | firstDataRow: { self.firstDataRow }")
for c, rowItem in enumerate( dataRow ):
# print(f"In row[{r}] the rowItem {c} has value { rowItem }")
cell = tk.Label(
self.tkTable,
text = str( self.tkTableData[r][c] ),
bg = skin.myBlack,
fg = skin.myWhite,
font = skin.provideFont("N"),
borderwidth = 2
#,padx = 5,pady = 5
)
cell.grid( row = curFrmRow, column = c, sticky = self.colSticky[c] )
# Finally draw the Table
self.tkTable.grid( row = 0, column = 0)
#,columnspan = self.colSpan,rowspan = 1, sticky = 'WENS'