Mais

Especifique uma classe de recurso GDB usando a caixa de diálogo Python Tkinter

Especifique uma classe de recurso GDB usando a caixa de diálogo Python Tkinter


Tentei especificar uma classe de recurso de um conjunto de dados GDB por meio do Python Tkinter tkFileDialog.askopenfilename. Abaixo está o script. Funcionou para mim no passado, quando lidava com arquivos .txt ou .las. No entanto, desta vez não está me dando a classe de recurso GDB, que não tem extensão de arquivo aqui. Por favor informar.

import arcpy from arcpy import env import Tkinter, tkFileDialog from Tkinter import * import tkMessageBox import ttk from tkFileDialog import askopenfilename de tkFileDialog import askopenfile env.workspace = "C:  temp Pilot  miniPilot.gFC" def browseFor_in: inFC_name = tkFileDialog.askopenfilename (parent = root, initialdir = r'C:  temp  miniPilot  miniPilot.gdb  data ',  title = "Escolha uma classe de recurso") inFC.set (inFC_name) def cancel (): root .destroy () def remove (): fields = arcpy.ListFields (inFC) para campo em campos: imprime field.name if field.name <> "OBJECTID" e field.name <> "SHAPE" e field.name <> "SHAPE_Length": arcpy.DeleteField_management (inFC, field.name) root = Tk () root.title ("XXXXXX") # O primeiro quadro denominado 'mainframe' mainframe = Frame (root, relief = "flat", borderwidth = 6 ) mainframe.grid (coluna = 0, linha = 0, pegajoso = (N, W, E, S)) mainframe.columnconfigure (0, peso = 1) mainframe.rowconfigure (0, peso = 1) # configurar variáveis ​​Tkinter , que são variáveis ​​globais, para o primeiro gui - a janela raiz inFC = StringVar () # widgets no mainframe Label (mainframe, text = "Especifique a classe de recurso:") .grid (coluna = 1, linha = 1, sticky = E) inFC_entry = Entry (mainframe, largura = 36, variável de texto = inFC) inFC_entry.grid (coluna = 2, linha = 1, aderente = (W, E)) inFC_browser_Button = Botão (mainframe, texto = "…", altura = 1, largura = 3, comando = browseFor_inFC) .grid (column = 3, row = 1, sticky = W) # dois widgets de botão refract_Button = Button (mainframe, text = "OK", command = remove) .grid (column = 0, row = 2, sticky = E) cancel_Button = Button (mainframe, text = "CANCEL", command = cancel) .grid (column = 4, row = 3, sticky = W) para filho em mainframe.winfo_children (): child.grid_configure (padx = 5, pady = 5) root.mainloop () # cria um loop de evento

Aqui está a atualização: usei tkFileDialog.askdirectory () para obter o nome do gdb para definir o espaço de trabalho. Em seguida, usei arcpy.da.Walk () do módulo de acesso a dados para carregar as classes de recursos em um array. Minha próxima etapa seria colocar uma caixa de combinação ttk na GUI e carregar as classes de recursos no menu suspenso da caixa de combinação para que os usuários possam especificar a classe de recursos para fazer quaisquer manipulações adicionais. Uma parte do script está listada abaixo. Definitivamente, vou tentar pythonaddins.OpenDialog também. Obrigado Jason por apontar para uma nova direção.

def browseFor_inFC (): ws_name = tkFileDialog.askdirectory () #print ws_name env.workspace = ws_name #print env.workspace wsName.set (ws_name) feature_classes = [] #fc = () para dirpath, dirnames, nomes de arquivos em arcpy.da .Walk (ws_name, datatype = "FeatureClass", type = "Polyline"): para nome de arquivo em nomes de arquivo: feature_classes.append (os.path.join (dirpath, filename)) print filename print feature_classes #print fc #fcCombo ['values '] = fc

Você não pode usar uma caixa de diálogo de arquivo para selecionar uma classe de recurso FileGDB, pois não é um arquivo, é parte de um banco de dados. Você precisa usar o Esri arcpy ou uma biblioteca que implemente as APIs Esri FileGDB ou Open FileGDB, como GDAL.