From 1d5c6ae767938eadc0c78b132af254c3836531ff Mon Sep 17 00:00:00 2001 From: Kukuksumusu <stercjak@fit.cvut.cz> Date: Mon, 13 Mar 2017 15:35:47 +0100 Subject: [PATCH] displaying group members --- .../controllers/mainwindow_controller.py | 23 +++++++++++++------ Implementace/database.py | 16 ++++++------- Implementace/main.py | 13 +++++++---- Implementace/model/person.py | 2 +- Implementace/model/qtmodels/GroupListModel.py | 19 +++++++++++++++ .../model/qtmodels/PersonListModel.py | 20 ++++++++++++++++ Implementace/windows/mainwindow.py | 13 ++++------- Implementace/windows/qt/mainwindow.ui | 14 ++++------- 8 files changed, 82 insertions(+), 38 deletions(-) create mode 100644 Implementace/model/qtmodels/GroupListModel.py create mode 100644 Implementace/model/qtmodels/PersonListModel.py diff --git a/Implementace/controllers/mainwindow_controller.py b/Implementace/controllers/mainwindow_controller.py index 71bfcc0..23eccd8 100644 --- a/Implementace/controllers/mainwindow_controller.py +++ b/Implementace/controllers/mainwindow_controller.py @@ -1,5 +1,7 @@ -from windows import mainwindow from PyQt5 import QtWidgets as Qt +from model.qtmodels.GroupListModel import GroupListModel +from model.qtmodels.PersonListModel import PersonListModel +from windows import mainwindow class Mainwindow(Qt.QMainWindow, mainwindow.Ui_MainWindow): @@ -7,13 +9,20 @@ class Mainwindow(Qt.QMainWindow, mainwindow.Ui_MainWindow): super(Mainwindow, self).__init__(parent) self.db = db self.setupUi(self) - print(self.db.get_groups()) - for group in self.db.get_groups(): - self.listGroups.addItem(group.name) - self.listGroups.currentItemChanged.connect(self.show_people) + model = GroupListModel(self.db.get_groups()) + self.listGroups.setModel(model) + self.listGroups.activated.connect(self.show_members) + self.listGroups.clicked.connect(self.show_members) + #for group in self.db.get_groups(): + # self.listGroups.addItem(group.name) + #self.listGroups.currentItemChanged.connect(self.show_people) #self.btnBrowse.clicked.connect(self.browse_folder) #self.list1.currentItemChanged.connect(self.show_content) - def show_people(self, current): - self.listPeople.clear() + def show_members(self, current): + group = current.data(GroupListModel.modelRole) + members = self.db.get_group_members(group.id) + model = PersonListModel(members) + self.listPeople.setModel(model) + diff --git a/Implementace/database.py b/Implementace/database.py index 33d4ee7..14e0566 100644 --- a/Implementace/database.py +++ b/Implementace/database.py @@ -10,7 +10,7 @@ class Database: def get_groups(self, person_id = None): if person_id is not None: - curs = self.connection.execute("SELECT * FROM GROUPS WHERE person_id = ?", person_id) + curs = self.connection.execute("SELECT * FROM GROUPS WHERE person_id = ?", str(person_id)) else: curs = self.connection.execute("SELECT * FROM GROUPS") res = [] @@ -19,12 +19,12 @@ class Database: return res def get_group_members(self, group_id): - curs = self.connection.execute('''SELECT * - FROM person - JOIN person_to_group - JOIN groups - WHERE groups.group_id = ?''', group_id) + curs = self.connection.execute('''SELECT person.* + FROM person + JOIN person_to_group USING (person_id) + JOIN groups USING (group_id) + WHERE groups.group_id = ?''', str(group_id)) res = [] for row in curs: - print(row) - #res.append(Person()) \ No newline at end of file + res.append(Person(row[0], row[1], row[2])) + return res diff --git a/Implementace/main.py b/Implementace/main.py index 5cd23ed..7b039ed 100644 --- a/Implementace/main.py +++ b/Implementace/main.py @@ -7,11 +7,14 @@ from database import Database def main(): - db = Database() - app = Qt.QApplication(sys.argv) - form = Mainwindow(db) - form.show() - app.exec_() + try: + db = Database() + app = Qt.QApplication(sys.argv) + form = Mainwindow(db) + form.show() + app.exec_() + except Exception as e: + print(e) if __name__ == '__main__': main() \ No newline at end of file diff --git a/Implementace/model/person.py b/Implementace/model/person.py index 1e275f8..bf770af 100644 --- a/Implementace/model/person.py +++ b/Implementace/model/person.py @@ -4,4 +4,4 @@ class Person: def __init__(self, id, name, surname): self.id = id self.name = name - self.surname = surname \ No newline at end of file + self.surname = surname diff --git a/Implementace/model/qtmodels/GroupListModel.py b/Implementace/model/qtmodels/GroupListModel.py new file mode 100644 index 0000000..74b45ea --- /dev/null +++ b/Implementace/model/qtmodels/GroupListModel.py @@ -0,0 +1,19 @@ +from PyQt5 import QtGui, QtCore, uic + + +class GroupListModel(QtCore.QAbstractListModel): + modelRole = -1 + + def __init__(self, groups=[], parent=None): + super(GroupListModel, self).__init__(parent) + self._groups = groups + + def rowCount(self, parent=None, *args, **kwargs): + return len(self._groups) + + def data(self, index, role=None): + if role == QtCore.Qt.DisplayRole: + return self._groups[index.row()].name + + if role == GroupListModel.modelRole: + return self._groups[index.row()] diff --git a/Implementace/model/qtmodels/PersonListModel.py b/Implementace/model/qtmodels/PersonListModel.py new file mode 100644 index 0000000..5a34169 --- /dev/null +++ b/Implementace/model/qtmodels/PersonListModel.py @@ -0,0 +1,20 @@ +from PyQt5 import QtGui, QtCore, uic + + +class PersonListModel(QtCore.QAbstractListModel): + modelRole = -1 + + def __init__(self, people=[], parent=None): + super(PersonListModel, self).__init__(parent) + self._people = people + + def rowCount(self, parent=None, *args, **kwargs): + return len(self._people) + + def data(self, index, role=None): + person = self._people[index.row()] + if role == QtCore.Qt.DisplayRole: + return person.name + " " + person.surname + + if role == PersonListModel.modelRole: + return self._people[index.row()] diff --git a/Implementace/windows/mainwindow.py b/Implementace/windows/mainwindow.py index e32eba5..56a37fb 100644 --- a/Implementace/windows/mainwindow.py +++ b/Implementace/windows/mainwindow.py @@ -31,15 +31,14 @@ class Ui_MainWindow(object): self.horizontalLayout.setContentsMargins(11, 11, 11, 11) self.horizontalLayout.setSpacing(6) self.horizontalLayout.setObjectName("horizontalLayout") - self.listGroups = QtWidgets.QListWidget(self.centralWidget) + self.listGroups = QtWidgets.QListView(self.centralWidget) + self.listGroups.setEditTriggers(QtWidgets.QAbstractItemView.DoubleClicked|QtWidgets.QAbstractItemView.EditKeyPressed) self.listGroups.setViewMode(QtWidgets.QListView.ListMode) self.listGroups.setObjectName("listGroups") self.horizontalLayout.addWidget(self.listGroups) - self.tablePeople = QtWidgets.QTableWidget(self.centralWidget) - self.tablePeople.setObjectName("tablePeople") - self.tablePeople.setColumnCount(0) - self.tablePeople.setRowCount(0) - self.horizontalLayout.addWidget(self.tablePeople) + self.listPeople = QtWidgets.QListView(self.centralWidget) + self.listPeople.setObjectName("listPeople") + self.horizontalLayout.addWidget(self.listPeople) self.verticalLayout_2.addLayout(self.horizontalLayout) MainWindow.setCentralWidget(self.centralWidget) self.menuBar = QtWidgets.QMenuBar(MainWindow) @@ -54,6 +53,4 @@ class Ui_MainWindow(object): _translate = QtCore.QCoreApplication.translate MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow")) self.btnAddGroup.setText(_translate("MainWindow", "Vytvořit skupinu")) - self.listGroups.setSortingEnabled(True) - self.tablePeople.setSortingEnabled(True) diff --git a/Implementace/windows/qt/mainwindow.ui b/Implementace/windows/qt/mainwindow.ui index 5a2de86..ffe7e9b 100644 --- a/Implementace/windows/qt/mainwindow.ui +++ b/Implementace/windows/qt/mainwindow.ui @@ -32,21 +32,17 @@ <item> <layout class="QHBoxLayout" name="horizontalLayout"> <item> - <widget class="QListWidget" name="listGroups"> + <widget class="QListView" name="listGroups"> + <property name="editTriggers"> + <set>QAbstractItemView::DoubleClicked|QAbstractItemView::EditKeyPressed</set> + </property> <property name="viewMode"> <enum>QListView::ListMode</enum> </property> - <property name="sortingEnabled"> - <bool>true</bool> - </property> </widget> </item> <item> - <widget class="QTableWidget" name="tablePeople"> - <property name="sortingEnabled"> - <bool>true</bool> - </property> - </widget> + <widget class="QListView" name="listPeople"/> </item> </layout> </item> -- GitLab