-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathtables.py
78 lines (62 loc) · 2.56 KB
/
tables.py
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
from PySide2 import QtWidgets as qtw
from PySide2 import QtGui as qtg
from PySide2 import QtCore as qtc
class MyTableWidget(qtw.QTableWidget):
def __init__(self):
super(MyTableWidget, self).__init__()
data = self.get_data()
self.setRowCount(len(data.keys()))
self.setColumnCount(4)
# Set the column names
self.setHorizontalHeaderItem(0, qtw.QTableWidgetItem('Name'))
self.setHorizontalHeaderItem(1, qtw.QTableWidgetItem('Gender'))
self.setHorizontalHeaderItem(2, qtw.QTableWidgetItem('Age'))
self.setHorizontalHeaderItem(3, qtw.QTableWidgetItem('Married'))
# Make the last column follow the dimensions of the window
self.horizontalHeader().setStretchLastSection(True)
# Set it to be read only (doesn't work with the checkbox, see it's related code)
self.setEditTriggers(qtw.QAbstractItemView.NoEditTriggers)
# Let user select rows
self.setSelectionBehavior(qtw.QAbstractItemView.SelectRows)
# Set the row values
for i, name in enumerate(data):
for j, key in enumerate(data[name].keys()):
print '{}, {}, {}, {}'.format(i, j, key, str(data[name][key]))
if j == 0:
cell_widget = qtw.QTableWidgetItem(name)
cell_widget.setFlags(cell_widget.flags()
^ qtc.Qt.ItemIsEditable)
self.setItem(i, j, cell_widget)
if key == 'gender':
cell_widget = qtw.QTableWidgetItem(data[name][key])
self.setItem(i, j + 1, cell_widget)
elif key == 'age':
cell_widget = qtw.QTableWidgetItem(str(data[name][key]))
self.setItem(i, j + 1, cell_widget)
elif key == 'married':
cell_widget = qtw.QCheckBox()
cell_widget.setChecked(data[name][key])
cell_widget.setEnabled(False)
self.setCellWidget(i, j + 1, cell_widget)
def get_data(self):
return {
'pippo': {
'gender': 'male',
'age': 27,
'married': False
},
'topolino': {
'gender': 'male',
'age': 24,
'married': True
},
'minnie': {
'gender': 'female',
'age': 24,
'married': True
}
}
app = qtw.QApplication()
table = MyTableWidget()
table.show()
app.exec_()