Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » GUI
  • » [PyQt] Импорт большого кол-ва записей в QSqlTableModel [RSS Feed]

#1 Июнь 14, 2013 09:21:10

mironich
От:
Зарегистрирован: 2011-05-23
Сообщения: 118
Репутация: +  2  -
Профиль   Отправить e-mail  

[PyQt] Импорт большого кол-ва записей в QSqlTableModel

Есть такой код:
Открывает файл с записями, если открыл создает обьект импортер.
Перемещает его в поток поток при старте вызывает метод импорта.

        
        records = open_file(fn) 
        if records:
            self.importer = RIWorcker(self.model, records)
            self.import_thread = QThread()
            self.import_thread.started.connect(self.importer.runImport)
            self.importer.moveToThread(self.import_thread)
            self.import_thread.start()

Метод runImport:
Импортирует записи в модель из БД.
 def runImport(self):
        self.model.setEditStrategy(QSqlTableModel.OnManualSubmit)
        for record in self.record_list:
            row = self.model.rowCount()
            self.model.insertRow(row)
            self.model.setData(self.model.index(row, 2), QVariant(record))
            self.record_imported.emit()
        self.model.submitAll()
        self.import_finished.emit()

Когда вызывается record_imported(сигнал)
На окне QDialog увеличивается прогресс бар.
И тут начинаются проблемы при вызове submitAll главное окно приложения виснет…
(Не отвечает на сообщения)
Почему виснет?
Все это отображается в QTableView



Отредактировано mironich (Июнь 14, 2013 10:24:19)

Офлайн

#2 Июнь 14, 2013 10:57:12

mironich
От:
Зарегистрирован: 2011-05-23
Сообщения: 118
Репутация: +  2  -
Профиль   Отправить e-mail  

[PyQt] Импорт большого кол-ва записей в QSqlTableModel

Обернул код импорта в транзикции, летает как электровеник, но они ведь не для этого предназначены..
Тоесть так:

self.model.database().transaction()
self.model.submitAll()
self.model.database().comit()



Отредактировано mironich (Июнь 14, 2013 11:01:03)

Офлайн

  • Начало
  • » GUI
  • » [PyQt] Импорт большого кол-ва записей в QSqlTableModel[RSS Feed]

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version