Хочу сразу сказать, что я новичок в питоне, что на форуме встречается весьма часто.
Прошу помочь в следующей проблеме:
У меня был написан код для работы с инструментами одной ГИС (ArcGIS). Данный код извлекает из папки hhh файлы замыкающих створов водосборов рек, flowdir - обрабатываемый файл-основа, а в папку fff происходит сохранение результатов обработки двух нужных инструментов:
import os import arcpy arcpy.CheckOutExtension("spatial") flowdir = "C:\\kkk\\flowdir" for root, dirs, files in os.walk('C:\\hhh'): for f in dirs: r = os.path.join(root,f) print r Output_raster = "C:\\fff\\W_{}".format(f) print Output_raster Output_table = "C:\\fff\\Z_{}".format(f) print Output_table arcpy.gp.Watershed_sa(flowdir, r, Output_raster, "VALUE" ) arcpy.gp.ZonalGeometryAsTable_sa(Output_raster, "VALUE", Output_table, "8,33333333333333E-04" ) print'End {}'.format(f) print '------------' print'End all'
Однако хочется, чтобы у пользователя была возможность не прописывать новые папки в коде, а выбирать по желанию в графическом интерфейсе.
С этой целью “написал” код с виджетом и кнопками, где первые две кнопки позволяют выбрать директории с исходными данными, третья - выбрать директорию для сохранения результатов обработки, четвертая - запускает процесс обработки, ну и пятая - закрывает программу.
ПОБЛЕМА в том, что при обработке программа зависает, успев сделать 1 цикл. Последнее что выдает программа: “Stap 1”.
Сам код:
from Tkinter import * import tkFileDialog import os import arcpy arcpy.CheckOutExtension("spatial") def Quit(ev): global root root.destroy() def LoadFile_SPP(ev): global SPP SPP = tkFileDialog.askdirectory() if SPP == '': return def LoadFile_FD(ev): global flowdir flowdir = tkFileDialog.askdirectory() if flowdir == '': return def SaveDir(ev): global SD SD = tkFileDialog.askdirectory() if SD == '': return def ProgWork(ev): for ddd, dirs, files in os.walk(SPP): for f in dirs: r = ddd + '/' + f print r Output_raster = SD + '/' +'Raster_' + f Output_table = SD + '/' +'ZGaT_' + f print Output_raster print Output_table print'Start {}'.format(f) arcpy.gp.Watershed_sa(flowdir, r, Output_raster, "VALUE") print'Stap {}'.format(f) arcpy.gp.ZonalGeometryAsTable_sa(Output_raster, "VALUE", Output_table, "8,33333333333333E-04" ) print'End {}'.format(f) print '------------' print'End all' root = Tk() panelFrame = Frame(root, height = 100, width = 500, bg = 'gray') panelFrame.pack(side = 'top', fill = 'x') loadSPPBtn = Button(panelFrame, text = 'LoadFile_SPP') loadFdBtn = Button(panelFrame, text = 'LoadFile_FD') saveBtn = Button(panelFrame, text = 'Save Directory') calculationBtn = Button(panelFrame, text = 'Calculation') quitBtn = Button(panelFrame, text = 'Quit') loadSPPBtn.bind("<Button-1>", LoadFile_SPP) loadFdBtn.bind("<Button-1>", LoadFile_FD) saveBtn.bind("<Button-1>", SaveDir) calculationBtn.bind("<Button-1>", ProgWork) quitBtn.bind("<Button-1>", Quit) loadSPPBtn.place(x = 10, y = 10, width = 80, height = 40) loadFdBtn.place(x = 100, y = 10, width = 80, height = 40) saveBtn.place(x = 190, y = 10, width = 90, height = 40) calculationBtn.place(x = 290, y = 10, width = 80, height = 40) quitBtn.place(x = 390, y = 10, width = 80, height = 40) root.mainloop()