Форум сайта python.su
А ещё можно делать вот так:
import sqlite3 with sqlite3.connect(':memory:') as conn: conn.enable_load_extension(True) conn.execute("SELECT load_extension('spatialite4.dll')") conn.execute("CREATE VIRTUAL TABLE kladr USING VirtualDbf('c:/temp/kladr/kladr.dbf', 'CP866')") conn.execute("CREATE VIRTUAL TABLE street USING VirtualDbf('c:/temp/kladr/street.dbf', 'CP866')") qry = ''' select k.name, s.name from kladr k inner join street s on substr(k.code, 1, 11) = substr(s.code, 1, 11) where substr(k.code, 12, 2) = '00' and substr(s.code, 16, 2) = '00' ''' for rec in conn.execute(qry): print ' '.join(unicode(i) for i in rec)
Офлайн
data - Данные используемые моделью.
DisplayRole - Текст отображаемый в ячейки
QSortFilterProxyModel - Модель - посредник которая сортирует колонки.
Офлайн
Большое спасибо, всем. Буду пробовать на выходных. На работе текучкой отвлекают. Хорошо, что есть такой форум и такие специалисты!
Офлайн
Здравствуйте, уважаемые разработчики.
Думал сам разберусь, но видно не судьба. Объясните пожалуйста зачем так сложно МОДЕЛЬ-ПРЕДСТАВЛЕНИЕ? Нельзя просто МОДЕЛЬ и работать с ней? Никак не пойму эту методологию. Для чего нужна модель и для чего нужно представление? И как сохранять изменения в базе?
Я наверно тупые вопросы задаю, сразу извиняюсь. Просто схему работы так и не понял. Хотя читал документацию, разбирал примеры. Все получалось, но это просто дублирование.
Спасибо. (если хоть кто-то откликнется на этот бред)
Офлайн
MaratD
Самое простое это работать непосредственно через SQL запросы. Если вам сложно с ОРМ, то начните с чистого SQL.
Офлайн
MaratDОдну модель можно подключать к нескольким представлениям. Изменение элементов в одном представлении будет сразу отражаться на всех остальных представлениях. Сами представления могут различаться. Например, строковую модель QStringListModel можно поключить как к QListView, так и к QComboBox.
Объясните пожалуйста зачем так сложно МОДЕЛЬ-ПРЕДСТАВЛЕНИЕ?
Отредактировано py.user.next (Март 5, 2016 10:57:17)
Офлайн
Получается, в модели собираются (т.е. выбираются) нужные данные с базы. Например, ФАМИЛИИ и ДАТА РОЖДЕНИЯ. А в представлении мы выбираем нужные данные с модели. И данные в представлениях могут быть разные. Например, в одном представлении ФАМИЛИИ, а в другом ДАТА РОЖДЕНИЯ?
Или не так понял?
Офлайн
MaratDТы можешь эти данные не из базы брать, а прямо внутри модели создавать. А представление будет их отображать, не зная, откуда они взяты. Модель их просто передаёт представлению, когда представление запрашивает их у модели.
И данные в представлениях могут быть разные. Например, в одном представлении ФАМИЛИИ, а в другом ДАТА РОЖДЕНИЯ?
#!/usr/bin/env python # -*- coding: utf-8 -*- from PyQt4 import QtGui, QtCore import sys class Example(QtGui.QWidget): def __init__(self): super(Example, self).__init__() self.initUI() def initUI(self): model = QtGui.QStringListModel(self) strings = QtCore.QStringList(['abc1', 'def2', 'ghi3']) model.setStringList(strings) view = QtGui.QListView(self) view.setModel(model) combo = QtGui.QComboBox(self) combo.setModel(model) tree = QtGui.QTreeView(self) tree.setModel(model) layout = QtGui.QHBoxLayout(self) layout.addWidget(view) layout.addWidget(combo) layout.addWidget(tree) self.setLayout(layout) self.setGeometry(300, 300, 400, 300) self.setWindowTitle('Model') self.show() def main(): app = QtGui.QApplication(sys.argv) ex = Example() sys.exit(app.exec_()) if __name__ == '__main__': main()
Отредактировано py.user.next (Март 5, 2016 17:02:52)
Офлайн
Здравствуйте, уважаемые разработчики.
Значит, в представлении отображается все данные из модели?
Офлайн
> Значит, в представлении отображается все данные из модели?
В представлении отображаются данные которые оно запросит у модели через метод data. Этот метод принимает 2 параметра:
index - экземпляр класса QModelIndex, он содержит сведения о том данные для какой ячейки нужно получить
role - http://doc.crossplatform.ru/qt/4.4.3/qt.html#ItemDataRole-enum
Офлайн