Спасибо! Это то, что нужно. Все слои отобразились корректно. Единственное, что меня смущает - почему координаты отображаются как-то странно... Там откуда-то шестизначные цифры в градусах. По идее такого быть не должно. С чем это может быть связано? Кривой проектный файл?
И еще один момент. Во время открытия проекта в консоль вываливается куча ошибок преобразования кодировки типа [OGR] Error Recoding 65003 UTF-8 и дальше иероглифы. Я так понимаю, что где-то в проектном файле прописана кодировка и необходимо ее определить. Если я прав, то подскажите пожалуйста где мне нужно эту кодировку определить? В параметрах канвы, в параметрах слоев или еще где-то?
Ну и последний вопрос. Я прикрутил к программе (код вы уже видели) еще один модуль, для того чтобы можно было отключать ненужные слои. И он вроде работает корректно, но опять-таки после accept() на конве ничего не меняется... Я передаю в этот модуль экземпляр QgsProject.instance() и с ним работаю внутри модуля. В чем моя ошибка? Код модуля ниже:
(Не ругайте сильно за полнейший бред в коде. Плясал с бубном весь день и исходную красоту сохранить забыл

))
Код: Выделить всё
# -*- coding: utf-8 -*-
from PyQt4 import QtGui,QtCore, QtXml
from PyQt4.QtGui import QTableWidgetItem
from qgis.core import *
from layerchooser_ui import Ui_Layers
class ReadProject(QtGui.QDialog, Ui_Layers):
def __init__(self, filePath, project):
QtGui.QDialog.__init__(self)
self.filePath = filePath
self.project = QgsProject.instance()
project = self.project
self.setupUi(self)
def populateTable(self):
ui = self
table = ui.tableWidget
# table.clear()
table.setRowCount(0)
xml = file(self.filePath).read()
d = QtXml.QDomDocument()
d.setContent(xml)
maps = d.elementsByTagName("maplayer")
self.maps=maps
for i in range(maps.length()):
table.setRowCount(table.rowCount()+1)
info = getMapInfo(maps.item(i))
nameItem = QTableWidgetItem(info['name'])
nameItem.setFlags(QtCore.Qt.ItemIsUserCheckable|QtCore.Qt.ItemIsSelectable|QtCore.Qt.ItemIsEnabled)
nameItem.setCheckState(QtCore.Qt.Unchecked)
nameItem.setData(QtCore.Qt.UserRole,str(i))
table.setItem(i,0,nameItem)
table.setItem(i,1,FixedWidgetItem(info['mtype']))
table.setItem(i,2,FixedWidgetItem(info['geom']))
table.setItem(i,3,FixedWidgetItem(info['provider']))
ds = FixedWidgetItem(info['ds'])
ds.setData(QtCore.Qt.ToolTipRole,info['ds'])
table.setItem(i,4,ds)
def accept(self):
here = QtCore.QDir.currentPath()
QtCore.QDir.setCurrent(str(QtCore.QFileInfo(self.filePath).absoluteDir().canonicalPath()))
for row in range(self.tableWidget.rowCount()):
if self.tableWidget.item(row,0).checkState():
index = self.tableWidget.item(row,0).data(QtCore.Qt.UserRole).toInt()[0]
self.project.read(self.maps.item(index))
QtCore.QDir.setCurrent(here)
super(ReadProject,self).accept()
pass
class FixedWidgetItem(QTableWidgetItem):
def __init__(self,label):
super(FixedWidgetItem,self).__init__(label)
self.setFlags(QtCore.Qt.ItemIsEnabled|QtCore.Qt.ItemIsSelectable)
def getMapInfo(mapDom):
name = mapDom.namedItem("layername").firstChild().toText().data()
ds = mapDom.namedItem("datasource").firstChild().toText().data()
provider = mapDom.namedItem("provider").firstChild().toText().data()
mtype = mapDom.attributes().namedItem("type").firstChild().toText().data()
if mtype == "vector":
geom = mapDom.attributes().namedItem("geometry").firstChild().toText().data()
elif mtype == "raster":
geom = mapDom.namedItem("rasterproperties").namedItem("mDrawingStyle").firstChild().toText().data()
if provider == "":
provider = "gdal?"
else:
print "Unknown mtype: %s " % mtype
return {'name':name, 'ds':ds, 'mtype':mtype, 'geom':geom, 'provider':provider}