Уведомления

Группа в Telegram: @pythonsu

#1 Май 5, 2013 06:54:40

xxnikolayxx
От:
Зарегистрирован: 2011-12-05
Сообщения: 161
Репутация: +  0  -
Профиль   Отправить e-mail  

PyQT QTreeView QStandartItemModel

Доброго времени суток и с праздником всех.
Пишу свое первое приложение на PyQt.
Написал все, кроме обновления информации в QTreeView.
На главной панели приложения расположился список(QTreeView) информация в который попадает из (QStandartItemModel) , не могу найти способ грамотно обновить информацию в списке, не мешая пользователю. Подскажите, существуют ли какие-то методы решения, а лучше ткните на метод в документации.

Спасибо. И еще раз с праздниками.

Офлайн

#2 Май 6, 2013 20:13:26

xxnikolayxx
От:
Зарегистрирован: 2011-12-05
Сообщения: 161
Репутация: +  0  -
Профиль   Отправить e-mail  

PyQT QTreeView QStandartItemModel

А если так:

     
ID, TYPE, STATUS, MARK, MODEL_T, GOV_NUMBER, DRIVER  = range(7)
class MainWindow(QtGui.QMainWindow):
    def __init__(self, parent = None):
        QtGui.QMainWindow.__init__(self, parent)
        self.resize(700, 500)
        Form, Base = uic.loadUiType('ui/MainWindow.ui')
        self.ui = Form()
        self.ui.setupUi(self)
        ...
        model1 = ui.treeView
        model1.setModel(Create_Technique_Model(model1))
        model1.resizeColumnToContents(TYPE)
        model1.resizeColumnToContents(DRIVER)
        model1.setColumnWidth(ID, 50)
        model1.setRootIsDecorated(False)
        model1.setAlternatingRowColors(True)
        model1.setSortingEnabled(True)
def Add_Technique_Model(model, id_, type_t, status, mark, model_t, gov_number, driver):
    # Добавление строки техники
    model.insertRow(0)
    model.setData(model.index(0, ID), id_)
    model.setData(model.index(0, TYPE), type_t)
    model.setData(model.index(0, STATUS), status)
    model.setData(model.index(0, MARK), mark)
    model.setData(model.index(0, MODEL_T), model_t)
    model.setData(model.index(0, GOV_NUMBER), gov_number)
    model.setData(model.index(0, DRIVER), driver)
def Create_Technique_Model(parent):
    # Обработка модуля техники
    model = QtGui.QStandardItemModel(0, 7, parent)
    model.setHeaderData(ID, QtCore.Qt.Horizontal, u"id")
    model.setHeaderData(TYPE, QtCore.Qt.Horizontal, u"Тип техники")
    model.setHeaderData(STATUS, QtCore.Qt.Horizontal, u"Статус")
    model.setHeaderData(MARK, QtCore.Qt.Horizontal, u"Марка")
    model.setHeaderData(MODEL_T, QtCore.Qt.Horizontal, u"Модель")
    model.setHeaderData(GOV_NUMBER, QtCore.Qt.Horizontal, u"Гос номер")
    model.setHeaderData(DRIVER, QtCore.Qt.Horizontal, u"Водитель")
    u = urlopen(('http://188.32.172.228:8000/get_technique/?login_id={0}&tocken={1}').format(LOGIN_ID, TOCKEN))
    js = json.load(u)
    for i in range(len(js['id'])):
        Add_Technique_Model(model, unicode(js['id'][i]), unicode(js['type'][i]), unicode(js['status'][i]), unicode(js['trend'][i]), unicode(js['model'][i]), unicode(js['number'][i]), unicode(js['driver'][i]))
    return model

Отредактировано xxnikolayxx (Май 6, 2013 20:15:46)

Офлайн

#3 Май 6, 2013 21:43:45

reclosedev
От: Н.Новгород
Зарегистрирован: 2012-03-29
Сообщения: 870
Репутация: +  173  -
Профиль   Отправить e-mail  

PyQT QTreeView QStandartItemModel

xxnikolayxx
не мешая пользователю
xxnikolayxx
u = urlopen((…
Из-за того, что может занять долгое время? Можно делать наполнение модели в отдельном потоке и по завершению обновлять GUI.

Офлайн

#4 Май 6, 2013 23:01:56

xxnikolayxx
От:
Зарегистрирован: 2011-12-05
Сообщения: 161
Репутация: +  0  -
Профиль   Отправить e-mail  

PyQT QTreeView QStandartItemModel

reclosedev
Вот меня интересует само обновление GUI.
Как это обычно происходит?
Заново отправить в модель данныне или существует какой-то другой подход?

Отредактировано xxnikolayxx (Май 6, 2013 23:45:05)

Офлайн

#5 Май 7, 2013 17:54:48

reclosedev
От: Н.Новгород
Зарегистрирован: 2012-03-29
Сообщения: 870
Репутация: +  173  -
Профиль   Отправить e-mail  

PyQT QTreeView QStandartItemModel

xxnikolayxx
Заново отправить в модель данныне или существует какой-то другой подход?
Когда пишется своя модель, при изменениях передается сигнал dataChanged, view на него реагирует.
В стандартной модели этот сигнал сам должен вызываться.

Если у вас есть возможность изменять только часть данных, например, дописывать в конец, изменяйте часть, если нет возможности, заново отправляйте данные в модель (если речь не идет о нескольких тысячах элементов, пользователь не заметит).

Офлайн

#6 Май 7, 2013 22:41:11

xxnikolayxx
От:
Зарегистрирован: 2011-12-05
Сообщения: 161
Репутация: +  0  -
Профиль   Отправить e-mail  

PyQT QTreeView QStandartItemModel

reclosedev
Понял, спасибо. Попробую.

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version