Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » GUI
  • » Зависает программа во время выполнения цикла. [RSS Feed]

#1 Апрель 2, 2017 16:16:36

renial
Зарегистрирован: 2017-04-02
Сообщения: 1
Репутация: +  0  -
Профиль   Отправить e-mail  

Зависает программа во время выполнения цикла.

Доброго времени суток!

Хочу сразу сказать, что я новичок в питоне, что на форуме встречается весьма часто.
Прошу помочь в следующей проблеме:
У меня был написан код для работы с инструментами одной ГИС (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()

Отредактировано renial (Апрель 2, 2017 16:18:12)

Офлайн

  • Начало
  • » GUI
  • » Зависает программа во время выполнения цикла.[RSS Feed]

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version