/
students.py
128 lines (102 loc) · 4.44 KB
/
students.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
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
from PyQt4 import QtCore, QtGui, Qt
from studentswindow import Ui_studentsDialog
from attendb import AttendDB
class Students(QtGui.QDialog):
def __init__(self):
QtGui.QDialog.__init__(self)
# setup
self.dialog = Ui_studentsDialog()
self.dialog.setupUi(self)
self.sid = None
self.adding = False
header = ['Sid','Apelido', 'First Name', 'Last Name']
self.dialog.studentTableWidget.setHorizontalHeaderLabels(header)
self.connect(self.dialog.studentTableWidget, \
QtCore.SIGNAL("cellClicked(int, int)"), \
self._on_cell_click)
self.connect(self.dialog.updateButton, QtCore.SIGNAL("clicked()"), \
self._on_update_click)
self.connect(self.dialog.newButton, QtCore.SIGNAL("clicked()"), \
self._on_new_click)
self.db = AttendDB()
self._update_list()
def _update_list(self):
"""Refresh the student list."""
#for i in range(self.dialog.studentTableWidget.rowCount()):
# self.dialog.studentTableWidget.removeRow(i)
self.dialog.studentTableWidget.clear()
rows = self.dialog.studentTableWidget.rowCount()
students = self.db.get_students()
while(rows < len(students)):
self.dialog.studentTableWidget.insertRow(rows)
rows += 1
for i, student in enumerate(students):
#self.dialog.studentTableWidget.insertRow(i)
for j, item in enumerate(student):
if item == None:
item = ''
newitem = QtGui.QTableWidgetItem(str(item))
self.dialog.studentTableWidget.setItem(i, j, newitem)
if self.sid != None and str(student[0]) == str(self.sid):
self.dialog.studentTableWidget.setCurrentItem(newitem)
self.dialog.studentTableWidget.sortItems(1)
def _on_cell_click(self, row, column):
"""Fill out the entries when a cell is clicked."""
# Get selected row
items = self.dialog.studentTableWidget.selectedItems()
# Set the input fields
self.dialog.nickNameInput.setText(items[1].text())
self.dialog.firstNameInput.setText(items[2].text())
self.dialog.lastNameInput.setText(items[3].text())
def _on_update_click(self):
"""Update current student or add new student."""
# Get filled in information
apelido = str(self.dialog.nickNameInput.text())
fn = str(self.dialog.firstNameInput.text())
ln = str(self.dialog.lastNameInput.text())
if self.adding:
self.sid = self.db.add_student(apelido, fn, ln)
self.dialog.studentTableWidget.setEnabled(True)
else:
items = self.dialog.studentTableWidget.selectedItems()
self.sid = str(items[0].text())
self.db.update_student(self.sid, apelido, fn, ln)
self.adding = False
self._update_list()
def _on_new_click(self):
self.adding = True
self.dialog.studentTableWidget.setEnabled(False)
#class TableModel(QtCore.QAbstractTableModel):
# def __init__(self, datain, headerdata, parent=None):
# """ datain: a list of lists
# headerdata: a list of strings
# """
# QtCore.QAbstractTableModel.__init__(self, parent)
# self.arraydata = datain
# self.headerdata = headerdata
#
# def rowCount(self, parent):
# return len(self.arraydata)
#
# def columnCount(self, parent):
# return len(self.arraydata[0])
#
# def data(self, index, role):
# if not index.isValid():
# return QtCore.QVariant()
# elif role != QtCore.Qt.DisplayRole:
# return QtCore.QVariant()
# return QtCore.QVariant(self.arraydata[index.row()][index.column()])
# def headerData(self, col, orientation, role):
# if orientation == QtCore.Qt.Horizontal and role == QtCore.Qt.DisplayRole:
# return QtCore.QVariant(self.headerdata[col])
# return QtCore.QVariant()
# def sort(self, Ncol, order):
# """Sort table by given column number.
# """
# self.emit(QtCore.SIGNAL("layoutAboutToBeChanged()"))
# self.arraydata = sorted(self.arraydata, key=operator.itemgetter(Ncol))
# if order == QtCore.Qt.DescendingOrder:
# self.arraydata.reverse()
# self.emit(QtCore.SIGNAL("layoutChanged()"))
#