-
artemiziy
- Активный участник
- Сообщения: 115
- Зарегистрирован: 29 апр 2008, 11:08
- Проекты: 1/1
- Репутация: 7
QGIS. Ошибка при выполнении сценария Python
Всем добрый день,
При попытке настроить в QGIS «Анализ данных» — «Параметры…» возникает следующее сообщение:
Код: Выделить всё
Ошибка при выполнении сценария Python:
TypeError: function takes exactly 5 arguments (1 given)
Traceback (most recent call last):
File "C:/OSGEO4~1/apps/qgis/./python/pluginsprocessingguiConfigDialog.py", line 150, in accept
self.tr('Wrong value for parameter "%s":nn%s' % (setting.description, unicode(e))))
TypeError: function takes exactly 5 arguments (1 given)
Версия Python: 2.7.5 (default, May 15 2013, 22:44:16) [MSC v.1500 64 bit (AMD64)]
Версия: 2.14.1-Essen Essen, ea85bef
Расположение Python:
C:/OSGEO4~1/apps/qgis/./python/pluginsprocessing
C:/OSGEO4~1/apps/qgis/./python
C:/Users/nikartem/.qgis2/python
C:/Users/nikartem/.qgis2/python/plugins
C:/OSGEO4~1/apps/qgis/./python/plugins
C:OSGEO4~1appsPython27libsite-packagesmatplotlib-1.3.1-py2.7-win-amd64.egg
C:OSGEO4~1appsPython27libsite-packagesnose-1.3.3-py2.7.egg
C:OSGEO4~1appsPython27libsite-packagestornado-4.0.1-py2.7-win-amd64.egg
C:OSGEO4~1appsPython27libsite-packagesbackports.ssl_match_hostname-3.4.0.2-py2.7.egg
C:OSGEO4~1appsPython27libsite-packagescertifi-14.05.14-py2.7.egg
c:osgeo4~1appspython27libsite-packagespython_dateutil-2.1-py2.7.egg
C:OSGEO4~1binpython27.zip
C:OSGEO4~1appsPython27DLLs
C:OSGEO4~1appsPython27lib
C:OSGEO4~1appsPython27libplat-win
C:OSGEO4~1appsPython27liblib-tk
C:OSGEO4~1bin
C:OSGEO4~1appsPython27
C:OSGEO4~1appsPython27libsite-packages
C:OSGEO4~1appsPython27libsite-packagesPIL
C:OSGEO4~1appsPython27libsite-packagesjinja2-2.7.2-py2.7.egg
C:OSGEO4~1appsPython27libsite-packagesmarkupsafe-0.23-py2.7-win-amd64.egg
C:OSGEO4~1appsPython27libsite-packagespytz-2012j-py2.7.egg
C:OSGEO4~1appsPython27libsite-packageswin32
C:OSGEO4~1appsPython27libsite-packageswin32lib
C:OSGEO4~1appsPython27libsite-packagesPythonwin
C:OSGEO4~1appsPython27libsite-packageswx-2.8-msw-unicode
C:/Users/nikartem/.qgis2//python
C:OSGEO4~1appsqgispythonpluginsfToolstools
Версия QGIS — 2.14.1-Essen, поставлена через OSGeo4W64
подскажите, пожалуйста, проблема в каких-то настройках?
-
Даниил Белый
- Новоприбывший
- Сообщения: 5
- Зарегистрирован: 19 ноя 2015, 12:38
- Репутация: 0
Re: QGIS. Ошибка при выполнении сценария Python
Сообщение
Даниил Белый » 09 фев 2018, 16:15
Такая же ошибка и у меня выпадает и при тех же обстоятельствах.
-
drrrrr
- Участник
- Сообщения: 78
- Зарегистрирован: 31 янв 2012, 10:51
- Репутация: 45
Re: QGIS. Ошибка при выполнении сценария Python
Сообщение
drrrrr » 09 фев 2018, 17:01
Разбирался я с этой злосчастной ошибкой, причина — фиг догадаешься — в настройках grass проверяется наличие пути %OSGEO4W_ROOT%appsmsys. Создайте эту папку руками ну или установите пакет msys.
-
Denis Rykov
- Гуру
- Сообщения: 3376
- Зарегистрирован: 11 апр 2008, 21:09
- Статьи: 33
- Проекты: 9
- Репутация: 528
- Ваше звание: Author
-
Контактная информация:
Re: QGIS. Ошибка при выполнении сценария Python
Сообщение
Denis Rykov » 09 фев 2018, 20:52
Даниил Белый писал(а): ↑
09 фев 2018, 16:15
Такая же ошибка и у меня выпадает и при тех же обстоятельствах.
Может быть стоит обновить QGIS?
Spatial is now, more than ever, just another column- The Geometry Column.
-
Svettlana
- Новоприбывший
- Сообщения: 6
- Зарегистрирован: 09 фев 2018, 10:39
- Репутация: 0
- Откуда: Симферополь
Re: QGIS. Ошибка при выполнении сценария Python
Сообщение
Svettlana » 12 фев 2018, 10:44
Добрый день! Помоги пожалуйста.
При Preprocessing Sentinel-2 где -то при 60% выполнения постоянно выпадает (независимо от версии QGIS или используемого компьютера):
Traceback (most recent call last):
File «C:/Users/Irina/.qgis2/python/pluginsSemiAutomaticClassificationPluginmaininterfacesentinelTab.py», line 164, in performSentinelConversion
self.sentinel2(cfg.ui.S2_label_86.text(), o)
File «C:/Users/Irina/.qgis2/python/pluginsSemiAutomaticClassificationPluginmaininterfacesentinelTab.py», line 249, in sentinel2
cfg.mx.msgErr38(outR)
File «C:/Users/Irina/.qgis2/python/pluginsSemiAutomaticClassificationPlugincoremessages.py», line 248, in msgErr38
self.msgBarError(cfg.QtGuiSCP.QApplication.translate(«semiautomaticclassificationplugin», «Error») + » [38]», cfg.QtGuiSCP.QApplication.translate(«semiautomaticclassificationplugin», «Unable to load raster » + path))
TypeError: function takes exactly 5 arguments (1 given)
Как решить эту проблему?
-
gamm
- Гуру
- Сообщения: 3814
- Зарегистрирован: 15 окт 2010, 08:33
- Репутация: 996
- Ваше звание: программист
- Откуда: Казань
Re: QGIS. Ошибка при выполнении сценария Python
Сообщение
gamm » 12 фев 2018, 11:07
запустить в отладчике, или поставить отладочную печать в том месте, где не хватает параметров. Обычно ерунда какая-нибудь, типа русских букв в путях, или отсутствия какой-нибудь папки (которых у Сентиля хватает). Или пальчиком по коду поводить в этом месте, посмотреть, какие такие 5 аргументов в функцию должны попасть.
-
Даниил Белый
- Новоприбывший
- Сообщения: 5
- Зарегистрирован: 19 ноя 2015, 12:38
- Репутация: 0
Re: QGIS. Ошибка при выполнении сценария Python
Сообщение
Даниил Белый » 13 фев 2018, 18:20
drrrrr:
Разбирался я с этой злосчастной ошибкой, причина — фиг догадаешься — в настройках grass проверяется наличие пути %OSGEO4W_ROOT%appsmsys. Создайте эту папку руками ну или установите пакет msys.
Это помогло! Выражаю огромную благодарность!!!
-
Svettlana
- Новоприбывший
- Сообщения: 6
- Зарегистрирован: 09 фев 2018, 10:39
- Репутация: 0
- Откуда: Симферополь
Re: QGIS. Ошибка при выполнении сценария Python
Сообщение
Svettlana » 13 фев 2018, 19:46
gamm писал(а): ↑
12 фев 2018, 11:07
Обычно ерунда какая-нибудь, типа русских букв в путях
Все получилось! Огромное спасибо!
ошибка при выполнении сценария Python
Что с этим делать?
- Starski777
- Сообщения: 6
- Зарегистрирован: Ср ноя 20, 2013 11:33 pm
Re: ошибка при выполнении сценария Python
dab » Чт ноя 21, 2013 9:25 am
У вас старые версии. Обновитесь, пожалуйста.
Сейчас актуальные версии:
QGIS 2.0.1 Dufour
openLand 0.2.6 от 14.11.2013
база данных 16 от 14.11.2013
-
dab - Сообщения: 104
- Зарегистрирован: Ср мар 06, 2013 6:44 pm
Re: ошибка при выполнении сценария Python
Starski777 » Чт ноя 21, 2013 8:51 pm
Спасибо большое. теперь такая проблема: Настройка базы данных, создаю базовый проект через меню модуля openLand «Кадастр» / «Настройки» / «Данные» . По предложенному образцу из документа
http://openlandgis.ru/repository/Admin_Guide.pdf
заполняю закладку «Данные» и перезагружаю QGIS. Открываю новый созданный проект и получается ошибка. см. ниже. Получается я не правильно заполнила Данные. Что надо писать мне? помогите пожалуйста
- Starski777
- Сообщения: 6
- Зарегистрирован: Ср ноя 20, 2013 11:33 pm
Re: ошибка при выполнении сценария Python
dab » Чт ноя 21, 2013 9:17 pm
Это не образец. Это всего лишь пример заполнения данных.
1. У Вас установлен сервер базы данных PostresSQL + PostGIS?
2. Вы создали базу данных по скриптам со страницы
http://openlandgis.ru/download
?
3. Для базы данных создали пользователя с паролем?
Если ответ «да» на все вопросы — тогда указывайте соответствующие имя пользователя и пароль, а не «sampleUserName» и «samplePass»
Если установка сервера БД и настройка вызывают затруднения — напишите мне на
biryuchkov@gmail.com
Думаю сможем решить все проблемы.
-
dab - Сообщения: 104
- Зарегистрирован: Ср мар 06, 2013 6:44 pm
Re: ошибка при выполнении сценария Python
Starski777 » Чт ноя 21, 2013 9:21 pm
Спасибо. Все еще раз посмотрю и думаю что напишу еще Вам. Просто я самоучка в этой программе, решила попробывать межевой план участка сделать. Вот пытаюсь
- Starski777
- Сообщения: 6
- Зарегистрирован: Ср ноя 20, 2013 11:33 pm
Re: ошибка при выполнении сценария Python
dab » Чт ноя 21, 2013 9:41 pm
Признаю, что система довольно сложная при установке и настройке. Поэтому готов всячески содействовать и помогать в этом. И денег не прошу
Только поймите меня правильно — мне проще на 40 минут через интернет подключиться к вашему компьютеру и всё установить и настроить самому, чем мы будем несколько дней вести оживленную переписку и обсуждать PostgreSQL, PostGIS, процедуры выполнения скриптов, особенности вашей операционной системы и т.д. и т.п.
-
dab - Сообщения: 104
- Зарегистрирован: Ср мар 06, 2013 6:44 pm
Вернуться в Администрирование
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0
Author Name: Andrew Shanin (Andrew Shanin)
Original Redmine Issue: 21402
Affected QGIS version: 3.6.0
Redmine category:gui
Ошибка при выполнении сценария Python:
RuntimeError: wrapped C/C++ object of type ContourGeneratorAlgorithm has been deleted
Traceback (most recent call last):
File «C:/Users/Андрей/AppData/Roaming/QGIS/QGIS3profilesdefault/python/pluginscontourContourGeneratorProvider.py», line 55, in loadAlgorithms
self.addAlgorithm( alg )
RuntimeError: wrapped C/C++ object of type ContourGeneratorAlgorithm has been deleted
Версия Python: 3.7.0 (v3.7.0:1bf9cc5093, Jun 27 2018, 04:59:51) [MSC v.1914 64 bit (AMD64)]
Версия: 3.6.0-Noosa Noosa, 5873452
Расположение Python:
C:/Users/Андрей/AppData/Roaming/QGIS/QGIS3profilesdefault/python/pluginscontour
L:/qgis-3.6/apps/qgis/./python
C:/Users/Андрей/AppData/Roaming/QGIS/QGIS3profilesdefault/python
C:/Users/Андрей/AppData/Roaming/QGIS/QGIS3profilesdefault/python/plugins
L:/qgis-3.6/apps/qgis/./python/plugins
L:qgis-3.6binpython37.zip
L:qgis-3.6appsPython37DLLs
L:qgis-3.6appsPython37lib
L:qgis-3.6bin
L:qgis-3.6appsPython37
L:qgis-3.6appsPython37libsite-packages
L:qgis-3.6appsPython37libsite-packageswin32
L:qgis-3.6appsPython37libsite-packageswin32lib
L:qgis-3.6appsPython37libsite-packagesPythonwin
C:/Users/Андрей/AppData/Roaming/QGIS/QGIS3profilesdefault/python
C:UsersАндрейAppDataRoamingQGISQGIS3profilesdefaultpythonpluginsBeeline/libs
C:UsersАндрейAppDataRoamingQGISQGIS3profilesdefaultpythonplugins
C:UsersАндрейAppDataRoamingQGISQGIS3profilesdefaultpythonpluginsshapetoolsext-libs
Every time I run a python script from the script editor in QGIS 2.18.3 I get this error message
After I click on «close program» the script continues like there was no error message. In total, I get a few of them, more or less one for every step of the code. The thing is that this is not a «really» error message because the code continues to run normally after I click on «close program» until the code finishes, and there is nothing wrong with the outputs of the code. The only annoying thing is that I can’t «leave» the code to run by itself and I need to monitor it in order to click every time on «close program» so that the code will continue.
Does somebody had the same issue?
an example code is the following. Is it iterate over folders and does some calculation on landsat band 10. Every time it produce a new file (output) I get the error message.
##calibrate landsat bands v8=name
##Select_directory=Folder
import glob, os, os.path, math
import glob, os, os.path, math
from PyQt4.QtCore import QFileInfo
from qgis.core import QgsRasterLayer, QgsRectangle
#Select_directory = r"C:UsersRanDesktopMannacalibrate LS8testing iterating"
x = "SUN_ELEVATION"
wrs_path = "WRS_PATH"
wrs_row = "WRS_ROW"
date_of_image ="DATE_ACQUIRED"
#create a list of the directories in the folder
folder_list=[name for name in os.listdir(Select_directory) if os.path.isdir(os.path.join(Select_directory, name))] #list the folder names
if len(folder_list) > 0:
a=0
for folder in folder_list: #folder= name of a folder with only files
folderpath = os.path.join(Select_directory,folder_list[a]) #the path to a specific folder
a+=1
os.chdir(folderpath)
name_list=[] #list of file names
for raster in glob.glob("*.tif"): #raster = tif files in specific folder
name_list.append(raster[:21])
unique = set(name_list) #get only unique values
for c in unique: #c= unique name of landsat image (include all bands)
for b in os.listdir(folderpath): #b= file name in a specific folder
if (c+"_MTL") in b:
i = os.path.join(folderpath,b) #this expression :[source+"\"+folder] is a path to a folder that has rasters
z = open(i,'r')
for line, text in enumerate(z):
if x in text:
y = text.split("=")
SUN_ELEVATION = (y[1])
elif wrs_path in text:
yy = text.split("=")
WRS_PATH = yy[1]
path_temp = WRS_PATH.strip()
WRS_PATH1 = path_temp.replace(" ","")
if len(WRS_PATH1)==2:
WRS_PATH1 = "0"+WRS_PATH1
elif wrs_row in text:
yyy = text.split("=")
WRS_ROW = yyy[1]
row_temp = WRS_ROW.strip()
WRS_ROW1 = row_temp.replace(" ","")
if len(WRS_ROW1)==2: #this is to check if the row is 2 or 3 digits
WRS_ROW1 = "0"+WRS_ROW1
elif date_of_image in text:
yyyy = text.split("=")
yyyyy = yyyy[1].split("-")
day = yyyyy[2]
month = yyyyy[1]
year = yyyyy[0][-2:]
DATE_ACQUIRED = year+month+day
image_suffix = "ls8_{}{}_{}".format(WRS_PATH1,WRS_ROW1,DATE_ACQUIRED)
SUN_ELEVATION = float(y[1])
SUN_ELEVATION1 = math.radians(SUN_ELEVATION)
syntax = '(A>0.001)*10000*(A*0.00002-0.1)/sin('+str(SUN_ELEVATION1)+')'
os.chdir(folderpath)
for raster in glob.glob("*.tif"):
if raster[:25]==c+"_B10":
outputName = os.path.join(folderpath,"cal_"+c+"_B10")
fileInfo = QFileInfo(raster)
baseName = fileInfo.baseName()
rlayer = QgsRasterLayer(raster, baseName)
outputs_GDALOGRRASTERCALCULATOR_1=processing.runalg('gdalogr:rastercalculator', rlayer,'1',None,'1',None,'1',None,'1',None,'1',None,'1','(A>0)*(1000*(1321.0789/(log(774.8853/(A*0.0003342+0.1)+1))-273.15))','0',4,None,outputName)
Every time I run a python script from the script editor in QGIS 2.18.3 I get this error message
After I click on «close program» the script continues like there was no error message. In total, I get a few of them, more or less one for every step of the code. The thing is that this is not a «really» error message because the code continues to run normally after I click on «close program» until the code finishes, and there is nothing wrong with the outputs of the code. The only annoying thing is that I can’t «leave» the code to run by itself and I need to monitor it in order to click every time on «close program» so that the code will continue.
Does somebody had the same issue?
an example code is the following. Is it iterate over folders and does some calculation on landsat band 10. Every time it produce a new file (output) I get the error message.
##calibrate landsat bands v8=name
##Select_directory=Folder
import glob, os, os.path, math
import glob, os, os.path, math
from PyQt4.QtCore import QFileInfo
from qgis.core import QgsRasterLayer, QgsRectangle
#Select_directory = r"C:UsersRanDesktopMannacalibrate LS8testing iterating"
x = "SUN_ELEVATION"
wrs_path = "WRS_PATH"
wrs_row = "WRS_ROW"
date_of_image ="DATE_ACQUIRED"
#create a list of the directories in the folder
folder_list=[name for name in os.listdir(Select_directory) if os.path.isdir(os.path.join(Select_directory, name))] #list the folder names
if len(folder_list) > 0:
a=0
for folder in folder_list: #folder= name of a folder with only files
folderpath = os.path.join(Select_directory,folder_list[a]) #the path to a specific folder
a+=1
os.chdir(folderpath)
name_list=[] #list of file names
for raster in glob.glob("*.tif"): #raster = tif files in specific folder
name_list.append(raster[:21])
unique = set(name_list) #get only unique values
for c in unique: #c= unique name of landsat image (include all bands)
for b in os.listdir(folderpath): #b= file name in a specific folder
if (c+"_MTL") in b:
i = os.path.join(folderpath,b) #this expression :[source+"\"+folder] is a path to a folder that has rasters
z = open(i,'r')
for line, text in enumerate(z):
if x in text:
y = text.split("=")
SUN_ELEVATION = (y[1])
elif wrs_path in text:
yy = text.split("=")
WRS_PATH = yy[1]
path_temp = WRS_PATH.strip()
WRS_PATH1 = path_temp.replace(" ","")
if len(WRS_PATH1)==2:
WRS_PATH1 = "0"+WRS_PATH1
elif wrs_row in text:
yyy = text.split("=")
WRS_ROW = yyy[1]
row_temp = WRS_ROW.strip()
WRS_ROW1 = row_temp.replace(" ","")
if len(WRS_ROW1)==2: #this is to check if the row is 2 or 3 digits
WRS_ROW1 = "0"+WRS_ROW1
elif date_of_image in text:
yyyy = text.split("=")
yyyyy = yyyy[1].split("-")
day = yyyyy[2]
month = yyyyy[1]
year = yyyyy[0][-2:]
DATE_ACQUIRED = year+month+day
image_suffix = "ls8_{}{}_{}".format(WRS_PATH1,WRS_ROW1,DATE_ACQUIRED)
SUN_ELEVATION = float(y[1])
SUN_ELEVATION1 = math.radians(SUN_ELEVATION)
syntax = '(A>0.001)*10000*(A*0.00002-0.1)/sin('+str(SUN_ELEVATION1)+')'
os.chdir(folderpath)
for raster in glob.glob("*.tif"):
if raster[:25]==c+"_B10":
outputName = os.path.join(folderpath,"cal_"+c+"_B10")
fileInfo = QFileInfo(raster)
baseName = fileInfo.baseName()
rlayer = QgsRasterLayer(raster, baseName)
outputs_GDALOGRRASTERCALCULATOR_1=processing.runalg('gdalogr:rastercalculator', rlayer,'1',None,'1',None,'1',None,'1',None,'1',None,'1','(A>0)*(1000*(1321.0789/(log(774.8853/(A*0.0003342+0.1)+1))-273.15))','0',4,None,outputName)
I was fortunate enough to get in touch with the author of the book so I will share his response here:
I suspect I may know what the problem is…after looking at this
reader’s problems in more depth, I’ve discovered that something has
changed in newer versions of QGIS, and the example code no longer
works as it is written. In technical terms, it seems that you now
need to instantiate the QApplication object before making the call to
QgsApplication.initQgis() — the example program in the book
instantiates the QApplication object after calling
QgsApplication.initQgis(), which causes the program to crash. To fix
this, change the main() function to look like the following:
def main():
""" Our main program.
"""
app = QApplication(sys.argv)
QgsApplication.setPrefixPath(os.environ['QGIS_PREFIX'],True)
QgsApplication.initQgis()
viewer = MapViewer("C:/folder/shapefile.shp")
viewer.show()
app.exec_()
QgsApplication.exitQgis()
As you can see, I’ve moved the «app = QApplication(sys.argv)» line to the top.
Important Note: Make sure that forward slashes are used in viewer = MapViewer("C:/folder/shapefile.shp")
— using a backslash will result in an error message stating that the shapefile is invalid.
I also thought it would be worth mentioning that none of the above fixes (comments on the question) were necessary. So, the script will work if the paths are defined as follows:
SET OSGEO4W_ROOT=C:OSGeo4W64
SET QGIS_PREFIX=%OSGEO4W_ROOT%appsqgis
SET PATH=%PATH%;%QGIS_PREFIX%bin
SET PYTHONPATH=%QGIS_PREFIX%python;%PYTHONPATH%
Then, the entire script looks like this:
import sys
import os
from qgis.core import *
from qgis.gui import *
from PyQt4.QtGui import *
from PyQt4.QtCore import Qt
#############################################################################
class MapViewer(QMainWindow):
def __init__(self, shapefile):
QMainWindow.__init__(self)
self.setWindowTitle("Map Viewer")
canvas = QgsMapCanvas()
canvas.useImageToRender(False)
canvas.setCanvasColor(Qt.white)
canvas.show()
layer = QgsVectorLayer(shapefile, "layer1", "ogr")
if not layer.isValid():
raise IOError("Invalid shapefile")
QgsMapLayerRegistry.instance().addMapLayer(layer)
canvas.setExtent(layer.extent())
canvas.setLayerSet([QgsMapCanvasLayer(layer)])
layout = QVBoxLayout()
layout.addWidget(canvas)
contents = QWidget()
contents.setLayout(layout)
self.setCentralWidget(contents)
#############################################################################
def main():
""" Our main program.
"""
app = QApplication(sys.argv)
QgsApplication.setPrefixPath(os.environ['QGIS_PREFIX'],True)
QgsApplication.initQgis()
viewer = MapViewer("C:/folder/shapefile.shp")
viewer.show()
app.exec_()
QgsApplication.exitQgis()
#############################################################################
if __name__ == "__main__":
main()
Execute it in the OSGEO4W Shell using the following command:
python "C:script.py"
Lastly, note that at the time of this writing, the script works properly and launches a viewer showing the shapefile referenced, but returns a few errors in the shell that do not seem to be problematic:
ERROR: Opening of authentication db FAILED
ERROR: Unable to establish authentication database connection
ERROR: Auth db could not be created and opened
QSqlDatabasePrivate::database: unable to open database: "unable to open database file Error opening database"
ERROR: Opening of authentication db FAILED
Much thanks to the author Erik Westra for providing me with this solution.
I’ve been using QGIS for a while and haven’t had any major issues so far, but now I am getting the following Python error messages and certain plugins won’t work. Any Ideas?
Failed to open Python console:
Traceback (most recent call last):
File "", line 2, in
File "/Applications/QGIS.app/Contents/MacOS/../Resources/python/console/console.py", line 46, in show_console
_console = PythonConsole(parent)
File "/Applications/QGIS.app/Contents/MacOS/../Resources/python/console/console.py", line 83, in __init__
self.console = PythonConsoleWidget(self)
File "/Applications/QGIS.app/Contents/MacOS/../Resources/python/console/console.py", line 109, in __init__
self.shell = ShellScintilla(self)
File "/Applications/QGIS.app/Contents/MacOS/../Resources/python/console/console_sci.py", line 86, in __init__
self.refreshSettingsShell()
File "/Applications/QGIS.app/Contents/MacOS/../Resources/python/console/console_sci.py", line 141, in refreshSettingsShell
self.setCaretForegroundColor(cursorColor)
TypeError: setCaretForegroundColor(self, QColor): argument 1 has unexpected type 'unicode'
Python version:
2.7.10 (default, Jul 30 2016, 18:31:42)
[GCC 4.2.1 Compatible Apple LLVM 8.0.0 (clang-800.0.34)]
QGIS version:
2.18.0 'Las Palmas', exported
Python path:
['/Users/Harry/.qgis2/python/plugins/processing', '/Applications/QGIS.app/Contents/MacOS/../Resources/python', u'/Users/Harry/.qgis2/python', u'/Users/Harry/.qgis2/python/plugins', '/Applications/QGIS.app/Contents/MacOS/../Resources/python/plugins', '/Library/Frameworks/SQLite3.framework/Versions/C/Python/2.7', '/Library/Frameworks/GEOS.framework/Versions/3/Python/2.7/site-packages', '/Library/Python/2.7/site-packages/scipy-override', '/Library/Python/2.7/site-packages/numpy-override', '/Library/Python/2.7/site-packages/matplotlib-override', '/Library/Frameworks/GDAL.framework/Versions/2.1/Python/2.7/site-packages', '/Library/Python/2.7/site-packages/PySAL-1.12.0-py2.7.egg', '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python27.zip', '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7', '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-darwin', '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac', '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac/lib-scriptpackages', '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-tk', '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-old', '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-dynload', '/Library/Python/2.7/site-packages', '/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python', '/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/PyObjC', u'/Users/Harry/.qgis2//python', '/Users/Harry/.qgis2/python/plugins/gearthview/ext-libs', u'/Users/Harry/Documents/Work/RCA/10.yr_2/ADS_3/mapping/qgs']
I also get this error when trying to run Cartographic Line Generalization plugin:
2016-12-07T15:01:02 1
Traceback (most recent call last):
File "/Users/Harry/.qgis2/python/plugins/CartoLineGen-master/cartolinegen.py", line 210, in run
self.count_vertices()
File "/Users/Harry/.qgis2/python/plugins/CartoLineGen-master/cartolinegen.py", line 234, in count_vertices
feat = inLayer.getFeatures()
AttributeError: 'QgsRasterLayer' object has no attribute 'getFeatures'
Я купил эту книгу под названием Построение картографических приложений с помощью QGIS, и я пытаясь выполнить одно из упражнений. Есть один скрипт, который я пытаюсь запустить, который приводит к сбою python, генерирующему сообщение об ошибке «python.exe перестал работать».
import sys
import os
from qgis.core import *
from qgis.gui import *
from PyQt4.QtGui import *
from PyQt4.QtCore import Qt
#############################################################################
class MapViewer(QMainWindow):
def __init__(self, shapefile):
QMainWindow.__init__(self)
self.setWindowTitle("Map Viewer")
canvas = QgsMapCanvas()
canvas.useImageToRender(False)
canvas.setCanvasColor(Qt.white)
canvas.show()
layer = QgsVectorLayer(shapefile, "layer1", "ogr")
if not layer.isValid():
raise IOError("Invalid shapefile")
QgsMapLayerRegistry.instance().addMapLayer(layer)
canvas.setExtent(layer.extent())
canvas.setLayerSet([QgsMapCanvasLayer(layer)])
layout = QVBoxLayout()
layout.addWidget(canvas)
contents = QWidget()
contents.setLayout(layout)
self.setCentralWidget(contents)
#############################################################################
def main():
""" Our main program.
"""
QgsApplication.setPrefixPath(os.environ['QGIS_PREFIX'], True)
QgsApplication.initQgis()
app = QApplication(sys.argv)
viewer = MapViewer("C:/folder/shapefile.shp")
viewer.show()
app.exec_()
QgsApplication.exitQgis()
#############################################################################
if __name__ == "__main__":
main()
Я не очень много знаю о Python с QGIS, поэтому я не слишком уверен, что вызывает сбой Python. Я уверен, что все модули импортируются правильно, потому что, если я определяю свои пути, а затем импортирую модули в сценарии с помощью оболочки OSGeo4W, сообщений об ошибках нет.
Вот как определяются мои пути:
SET OSGEO4W_ROOT=C:OSGeo4W64
SET QGIS_PREFIX=%OSGEO4W_ROOT%appsqgis
SET PATH=%PATH%;%QGIS_PREFIX%bin
SET PYTHONPATH=%QGIS_PREFIX%python;%PYTHONPATH%
Учитывая все это, я думаю, что в сценарии должно быть что-то не так. Однако, когда я проверяю сценарий с помощью http://pep8online.com/, я не могу исправить ошибки, которые В результате Python не падает.
Обратите внимание, что я пробовал Я пытался SET PATH=%QGIS_PREFIX%bin;%PATH%
вместо SET PATH=%PATH%;%QGIS_PREFIX%bin
безуспешно.
2 ответа
Лучший ответ
Мне посчастливилось связаться с автором книги, поэтому я поделюсь его ответом здесь:
Я подозреваю, что могу знать, в чем проблема … после более глубокого изучения проблем этого читателя я обнаружил, что что-то изменилось в более новых версиях QGIS, и пример кода больше не работает так, как написано. С технической точки зрения кажется, что теперь вам нужно создать экземпляр объекта QApplication перед выполнением вызова QgsApplication.initQgis () — пример программы в книге создает экземпляр объекта QApplication после вызова QgsApplication.initQgis (), что заставляет программу врезаться . Чтобы это исправить, измените функцию main (), чтобы она выглядела следующим образом:
def main():
""" Our main program.
"""
app = QApplication(sys.argv)
QgsApplication.setPrefixPath(os.environ['QGIS_PREFIX'],True)
QgsApplication.initQgis()
viewer = MapViewer("C:/folder/shapefile.shp")
viewer.show()
app.exec_()
QgsApplication.exitQgis()
Как видите, я переместил строку «app = QApplication (sys.argv)» в начало.
Важное примечание . Убедитесь, что в viewer = MapViewer("C:/folder/shapefile.shp")
используются косые черты forward — при использовании обратной косой черты появляется сообщение о том, что Шейп-файл недействителен.
Я также подумал, что стоит упомянуть, что ни одно из вышеперечисленных исправлений (комментариев к вопросу) не было необходимо. Итак, скрипт будет работать, если пути определены следующим образом:
SET OSGEO4W_ROOT=C:OSGeo4W64
SET QGIS_PREFIX=%OSGEO4W_ROOT%appsqgis
SET PATH=%PATH%;%QGIS_PREFIX%bin
SET PYTHONPATH=%QGIS_PREFIX%python;%PYTHONPATH%
Тогда весь скрипт выглядит так:
import sys
import os
from qgis.core import *
from qgis.gui import *
from PyQt4.QtGui import *
from PyQt4.QtCore import Qt
#############################################################################
class MapViewer(QMainWindow):
def __init__(self, shapefile):
QMainWindow.__init__(self)
self.setWindowTitle("Map Viewer")
canvas = QgsMapCanvas()
canvas.useImageToRender(False)
canvas.setCanvasColor(Qt.white)
canvas.show()
layer = QgsVectorLayer(shapefile, "layer1", "ogr")
if not layer.isValid():
raise IOError("Invalid shapefile")
QgsMapLayerRegistry.instance().addMapLayer(layer)
canvas.setExtent(layer.extent())
canvas.setLayerSet([QgsMapCanvasLayer(layer)])
layout = QVBoxLayout()
layout.addWidget(canvas)
contents = QWidget()
contents.setLayout(layout)
self.setCentralWidget(contents)
#############################################################################
def main():
""" Our main program.
"""
app = QApplication(sys.argv)
QgsApplication.setPrefixPath(os.environ['QGIS_PREFIX'],True)
QgsApplication.initQgis()
viewer = MapViewer("C:/folder/shapefile.shp")
viewer.show()
app.exec_()
QgsApplication.exitQgis()
#############################################################################
if __name__ == "__main__":
main()
Выполните его в оболочке OSGEO4W с помощью следующей команды:
python "C:script.py"
И наконец, обратите внимание, что на момент написания этой статьи скрипт работал правильно и запускал программу просмотра, показывающую ссылочный шейп-файл, но возвращал в оболочке несколько ошибок, которые не кажутся проблемными:
ERROR: Opening of authentication db FAILED
ERROR: Unable to establish authentication database connection
ERROR: Auth db could not be created and opened
QSqlDatabasePrivate::database: unable to open database: "unable to open database file Error opening database"
ERROR: Opening of authentication db FAILED
Большое спасибо автору Эрику Вестре за предоставление мне этого решения.
3
ge0m3try
4 Июл 2016 в 00:43
Одна вещь, которая кажется подозрительной, это то, что вы создаете элемент графического интерфейса без предоставления ему родителя — QgsMapCanvas()
— и затем пытаетесь вручную show()
его перед добавлением в макет. Вы никогда не должны вызывать show()
для подвиджетов, и все подвиджеты должны быть связаны с основным виджетом (или одним из его других подвиджетов).
Кроме того, вы должны хранить постоянные ссылки на объекты Python; в противном случае возможно, что лежащий в основе объект C ++ будет собирать мусор и вызывать сбой вашей программы. Вы делаете это, назначая свои виджеты и макеты атрибуту self
Ex .
self.layout = QVBoxLayout(...
self.layer = ...
Вы должны добавить холст, как это, вам не нужно вызывать .show()
self.canvas = QgsMapCanvas(self)
layout.addWidget(self.canvas)
1
Brendan Abel
22 Июн 2016 в 20:00
Я использую QGIS некоторое время, но после использования QGIS 2 плагин OpenLayers не работает для меня на моем домашнем ПК. Тем не менее, я успешно установил ту же версию на своем рабочем месте. Я просмотрел другие посты и попытался настроить CRS и разрешить на лету, но у меня это не работает.
Я также попытался удалить / переустановить.
Произошла ошибка при выполнении кода Python:
Трассировка (последний вызов был последним): файл «C: Users Lee / .qgis2 / python / plugins openlayers_plugin openlayers_plugin.py», строка 48, в самом addLayer. plugin.addLayer (self) Файл «C: Users Lee / .qgis2 / python / plugins openlayers_plugin openlayers_plugin.py», строка 194, в слое addLayer = OpenlayersLayer (self.iface, self .__ordinRSGoogle, self.olLayerTypeRegistry) Файл «C: Users Lee / .qgis2 / python / plugins openlayers_plugin openlayers_layer.py», строка 64, в __init
self.page = OLWebPage () Файл «C: Users Lee / .qgis2 / python / plugins openlayers_plugin openlayers_layer.py «, строка 38, в init
proxy = getProxy () Файл «C: Users Lee / .qgis2 / python / plugins openlayers_plugin tools_network.py», строка 42, в getProxy proxy.setPort (settings.value («/ proxyPort», 10, type = int)) TypeError: невозможно преобразовать QVariant типа 10 в QMetaType типа 2
Версия Python: 2.7.5 (по умолчанию, 15 мая 2013 г., 22:44:16) [MSC v.1500 64 бит (AMD64)]
Версия QGIS: 2.0.1-Dufour Dufour, d94c044
Путь к Python: [‘C: / PROGRA ~ 1 / QGISDU ~ 1 / apps / qgis /./ python / plugins processing’, ‘C: Users Lee .qgis2 python plugins GeoCoding’, ‘C: /PROGRA~1/QGISDU~1/apps/qgis/./python ‘,’ C: Users Lee / .qgis2 / python ‘,’ C: Users Lee / .qgis2 / python / plugins ‘,’ C : / PROGRA ~ 1 / QGISDU ~ 1 / apps / qgis /./ python / plugins ‘,’ C: PROGRA ~ 1 QGISDU ~ 1 bin python27.zip ‘,’ C: PROGRA ~ 1 QGISDU ~ 1 apps Python27 DLLs ‘,’ C: PROGRA ~ 1 QGISDU ~ 1 apps Python27 lib ‘,’ C: PROGRA ~ 1 QGISDU ~ 1 apps Python27 lib plat-win ‘ , ‘C: PROGRA ~ 1 QGISDU ~ 1 apps Python27 lib lib-tk’, ‘C: PROGRA ~ 1 QGISDU ~ 1 bin’, ‘C: PROGRA ~ 1 QGISDU ~ 1 apps Python27 ‘,’ C: PROGRA ~ 1 QGISDU ~ 1 apps Python27 lib site-packages ‘,’ C: PROGRA ~ 1 QGISDU ~ 1 apps Python27 lib site-packages PIL ‘,’ C: PROGRA ~ 1 QGISDU ~ 1 apps Python27 lib site-packages win32 ‘,’ C: PROGRA ~ 1 QGISDU ~ 1 apps Python27 lib site-packages win32 lib ‘,’ C: PROGRA ~ 1 QGISDU ~ 1 apps Python27 lib site-packages Pythonwin ‘,’ C: PROGRA ~ 1 QGISDU ~ 1 apps Python27 lib site-packages Shapely-1.2. 18-py2.7-win-amd64.egg ‘,’ C: PROGRA ~ 1 QGISDU ~ 1 apps Python27 lib site-packages six-1.3.0-py2.7.egg ‘,’ C : PROGRA ~ 1 QGISDU ~ 1 apps Python27 lib site-packages wx-2.8-msw-unicode ‘,’ C: PROGRA ~ 1 QGISDU ~ 1 apps Python27 lib site-packages xlrd-0.9.2-py2.7.egg ‘,’ C: PROGRA ~ 1 QGISDU ~ 1 apps Python27 lib site-packages xlwt-0.7.5-py2.7.egg ‘,’ C: Users Lee .qgis2 python plugins mmqgis / forms ‘,’ C: PROGRA ~ 1 QGISDU ~ 1 apps qgis python plugins fTools tools ‘] PROGRA ~ 1 QGISDU ~ 1 apps Python27 lib site-packages win32 lib ‘,’ C: PROGRA ~ 1 QGISDU ~ 1 apps Python27 lib site-packages Pythonwin ‘,’ C: PROGRA ~ 1 QGISDU ~ 1 apps Python27 lib site-packages Shapely-1.2.18-py2.7-win-amd64.egg ‘,’ C: PROGRA ~ 1 QGISDU ~ 1 apps Python27 lib site-packages six-1.3.0-py2.7.egg ‘,’ C: PROGRA ~ 1 QGISDU ~ 1 apps Python27 lib site-packages wx-2.8-msw -unicode ‘,’ C: PROGRA ~ 1 QGISDU ~ 1 apps Python27 lib site-packages xlrd-0.9.2-py2.7.egg ‘,’ C: PROGRA ~ 1 QGISDU ~ 1 apps Python27 lib site-packages xlwt-0.7.5-py2.7.egg ‘,’ C: Users Lee .qgis2 python plugins mmqgis / forms ‘,’ C: PROGRA ~ 1 QGISDU ~ 1 приложения QGIS питон Plugins fTools инструменты] PROGRA ~ 1 QGISDU ~ 1 apps Python27 lib site-packages win32 lib ‘,’ C: PROGRA ~ 1 QGISDU ~ 1 apps Python27 lib site-packages Pythonwin ‘,’ C: PROGRA ~ 1 QGISDU ~ 1 apps Python27 lib site-packages Shapely-1.2.18-py2.7-win-amd64.egg ‘,’ C: PROGRA ~ 1 QGISDU ~ 1 apps Python27 lib site-packages six-1.3.0-py2.7.egg ‘,’ C: PROGRA ~ 1 QGISDU ~ 1 apps Python27 lib site-packages wx-2.8-msw -unicode ‘,’ C: PROGRA ~ 1 QGISDU ~ 1 apps Python27 lib site-packages xlrd-0.9.2-py2.7.egg ‘,’ C: PROGRA ~ 1 QGISDU ~ 1 apps Python27 lib site-packages xlwt-0.7.5-py2.7.egg ‘,’ C: Users Lee .qgis2 python plugins mmqgis / forms ‘,’ C: PROGRA ~ 1 QGISDU ~ 1 приложения QGIS питон Plugins fTools инструменты]2.18-py2.7-win-amd64.egg ‘,’ C: PROGRA ~ 1 QGISDU ~ 1 apps Python27 lib site-packages six-1.3.0-py2.7.egg ‘,’ C : PROGRA ~ 1 QGISDU ~ 1 apps Python27 lib site-packages wx-2.8-msw-unicode ‘,’ C: PROGRA ~ 1 QGISDU ~ 1 apps Python27 lib site-packages xlrd-0.9.2-py2.7.egg ‘,’ C: PROGRA ~ 1 QGISDU ~ 1 apps Python27 lib site-packages xlwt-0.7.5-py2.7.egg ‘,’ C: Users Lee .qgis2 python plugins mmqgis / forms ‘,’ C: PROGRA ~ 1 QGISDU ~ 1 apps qgis python plugins fTools tools ‘]2.18-py2.7-win-amd64.egg ‘,’ C: PROGRA ~ 1 QGISDU ~ 1 apps Python27 lib site-packages six-1.3.0-py2.7.egg ‘,’ C : PROGRA ~ 1 QGISDU ~ 1 apps Python27 lib site-packages wx-2.8-msw-unicode ‘,’ C: PROGRA ~ 1 QGISDU ~ 1 apps Python27 lib site-packages xlrd-0.9.2-py2.7.egg ‘,’ C: PROGRA ~ 1 QGISDU ~ 1 apps Python27 lib site-packages xlwt-0.7.5-py2.7.egg ‘,’ C: Users Lee .qgis2 python plugins mmqgis / forms ‘,’ C: PROGRA ~ 1 QGISDU ~ 1 apps qgis python plugins fTools tools ‘]egg ‘,’ C: Users Lee .qgis2 python plugins mmqgis / forms ‘,’ C: PROGRA ~ 1 QGISDU ~ 1 apps qgis python plugins fTools tools ‘]egg ‘,’ C: Users Lee .qgis2 python plugins mmqgis / forms ‘,’ C: PROGRA ~ 1 QGISDU ~ 1 apps qgis python plugins fTools tools ‘]