Arc Python add in - dynamic combo populate

المشرف العام

Administrator
طاقم الإدارة
I am attempting my very first python add in. what I would like it to do is look at a feature class, look through the town field. when the user selects a town I want the next combo box to populate with the LABELTEXT field with all of the values in that town and when a LABELTEXT is selected zoom to that bad boy.

I dont know how to get the town return into the ComboClass2 class or build the query to filter based on the town result

class ComboBoxClass1(object): """Implementation for addin2_addin.combobox (ComboBox)""" def __init__(self): self.editable = True self.enabled = True self.dropdownWidth = 'WWWWWWWWWWWWWWWW' self.width = 'WWWWWWWWWWWWWWWW' def onSelChange(self, selection): layer = arcpy.mapping.ListLayers(mxd, "block_cards", df)[0] a = arcpy.SelectLayerByAttribute_management(layer, "NEW_SELECTION", "town = '" + selection + "'""'") return a df.extent = layer.getSelectedExtent() arcpy.RefreshActiveView() def onFocus(self, focused): global mxd mxd = arcpy.mapping.MapDocument('current') global df df = arcpy.mapping.ListDataFrames(mxd, "Layers")[0] layer = arcpy.mapping.ListLayers(mxd, "block_cards", df)[0] arcpy.SelectLayerByAttribute_management(layer, "CLEAR_SELECTION") self.items = [] values = [row[0] for row in arcpy.da.SearchCursor(layer, ["town"])] for uniqueVal in sorted(set(values)): self.items.append(uniqueVal) class ComboBoxClass2(object): """Implementation for addin2_addin.combobox (ComboBox)""" def __init__(self): self.editable = True self.enabled = True self.dropdownWidth = 'WWWWWW' self.width = 'WWWWWW' def onSelChange(self, selection): layer = arcpy.mapping.ListLayers(mxd, "block_cards", df)[0] arcpy.SelectLayerByAttribute_management(layer, "NEW_SELECTION", "town = '" + ComboBoxClass1.onSelChange() + "' AND LABELTEXT = '" + selection + "'" ) df.extent = layer.getSelectedExtent() arcpy.RefreshActiveView() def onFocus(self, focused): global mxd mxd = arcpy.mapping.MapDocument('current') global df df = arcpy.mapping.ListDataFrames(mxd, "Layers")[0] layer = arcpy.mapping.ListLayers(mxd, "block_cards", df)[0] arcpy.SelectLayerByAttribute_management(layer, "CLEAR_SELECTION") self.items = [] values = [row[0] for row in arcpy.da.SearchCursor(layer, ["LABELTEXT"])] for uniqueVal in sorted(set(values)): self.items.append(uniqueVal)

أكثر...
 
أعلى