【发布时间】:2012-11-18 15:17:02
【问题描述】:
我在一个名为 SymbolManager.py 的文件中有以下类:
from qgis.core import *
class SimbolManager:
def __init__(self):
self.initSymbols()
def initSymbols(self):
self.symbolMap = {}
props = {'color': '0,0,200'}
self.symbolMap['SimpleVertex'] = QgsMarkerSymbolV2.createSimple(props)
props = {'width': '1', 'color': '0,0,255'}
self.symbolMap['SimpleLine'] = QgsLineSymbolV2.createSimple(props)
def getSymbolRenderer(self, name):
symb = self.symbolMap[name]
if symb is not None:
return QgsSingleSymbolRendererV2(symb)
return None
我尝试从同一目录中的文件导入SymbolManager:
from PyQt4 import QtCore, QtGui
from Ui_OsmNavigator import Ui_OsmNavigator
from PyQt4.QtCore import *
from PyQt4.QtGui import *
from qgis.core import *
import DbConnection
from SymbolManager import SymbolManager // HERE IS THE PROBLEM
当我从 QGIS 内部运行脚本时,它给了我以下错误:
第 28 行,在 from SymbolManager import SymbolManager ImportError: cannot import name SymbolManager
我做错了什么?
【问题讨论】:
-
请使用
pyflakes或pylint,最好以与您的编辑器集成的方式(Emacs+flymake+pyflakes+pep8做一个很棒的即时检查器) , 例如)。附言PEP8 强烈反对使用import *——它会将失败的导入延迟到您尝试使用它们的位置,因此在执行过程中稍后会得到"NameError: FOO"而不是"NameError: FOO"。 -
另外,我怀疑您的
getSymbolRenderer可能有问题:如果在字典中找不到name,symbolName[name]将引发错误。您以后检查if symb is not None将无济于事。相反,我会使用return QgsSingleSymbolRendererV2(self.symbolMap[name]) if name in self.symbolName else None。 -
@ErikAllik:感谢您的建议。你可以想象,我根本不是 python 开发者。