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

Спасибо. И еще раз с праздниками.
xxnikolayxx
А если так:
     
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
reclosedev
xxnikolayxx
не мешая пользователю
xxnikolayxx
u = urlopen((…
Из-за того, что может занять долгое время? Можно делать наполнение модели в отдельном потоке и по завершению обновлять GUI.
xxnikolayxx
reclosedev
Вот меня интересует само обновление GUI.
Как это обычно происходит?
Заново отправить в модель данныне или существует какой-то другой подход?
reclosedev
xxnikolayxx
Заново отправить в модель данныне или существует какой-то другой подход?
Когда пишется своя модель, при изменениях передается сигнал dataChanged, view на него реагирует.
В стандартной модели этот сигнал сам должен вызываться.

Если у вас есть возможность изменять только часть данных, например, дописывать в конец, изменяйте часть, если нет возможности, заново отправляйте данные в модель (если речь не идет о нескольких тысячах элементов, пользователь не заметит).
xxnikolayxx
reclosedev
Понял, спасибо. Попробую.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB