Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from PySide import QtGui, QtCore
- from pymongo import MongoClient
- # тестовая модель
- class TableModel(QtCore.QAbstractTableModel):
- def __init__(self, parent):
- super(TableModel, self).__init__(parent)
- # если заполнить модель сразу — отображается нормально, без reset'а
- # self.cursor = mongoclient.sba.products.find() # поиск всех данных
- # но заполним модель в методе updateDataSet, согласно задаче
- self.cursor = None
- def updateDataSet(self, lter):
- self.beginResetModel()
- # запрос данных из базы "sba", коллекции "products"
- self.cursor = mongoclient.sba.products.find(lter)
- self.endResetModel()
- def __data__(self, index, role):
- if not index.isValid():
- return None
- if index.row() > self.cursor.count():
- return None
- if role != QtCore.Qt.QDisplayRole:
- return None
- try:
- # итерация по курсору, при завершении выбрасывает исключение StopIteration
- row = self.cursor.__next__()
- except StopIteration as e:
- return None
- if index.column() == 0:
- return row['code']
- elif index.column() == 1:
- return row['title']
- def rowCount(self, parent=None):
- if not self.cursor:
- return 0
- return self.cursor.count()
- def columnCount(self, parent=None):
- return 2
- def headerData(self, section, orientation, role):
- if role != QtCore.Qt.DisplayRole:
- return None
- if orientation == QtCore.Qt.Horizontal:
- if section == 0:
- return 'Код'
- elif section == 1:
- return 'Наименование'
- return None
- if __name__ == '__main__':
- app = QtGui.QApplication([])
- # клиент
- mongoclient = MongoClient()
- # окно
- widget = QtGui.QWidget()
- layout = QtGui.QVBoxLayout(widget)
- # модель и представление
- tableView = QtGui.QTableView(widget)
- tableModel = TableModel(tableView)
- tableView.setModel(tableModel)
- layout.addWidget(tableView)
- # кнопки внизу окна
- hbox = QtGui.QHBoxLayout()
- layout.addLayout(hbox)
- hbox.addStretch()
- loadAllButton = QtGui.QPushButton('Загрузить всё', widget)
- loadAllButton.clicked.connect(lambda: tableModel.updateDataSet(None))
- hbox.addWidget(loadAllButton)
- loadLterButton = QtGui.QPushButton('Условный фильтр', widget)
- loadLterButton.clicked.connect(lambda: tableModel.updateDataSet({'prices.price' : {'$gt' : 3000}}))
- hbox.addWidget(loadLterButton)
- # шоу и выход
- widget.show()
- exit(app.exec_())
Advertisement
Add Comment
Please, Sign In to add comment