POST
|
Thanks Wayne. I knew it was likely something simple...and it was. I apologize for the apparently "incoherent" logic. I just started writing code literally a month ago. It's a steep learning curve. - Katie
... View more
05-20-2014
02:39 PM
|
0
|
0
|
830
|
POST
|
Hi Wayne, Thanks so much for your response. I suppose I should elaborate a bit more. I have an add in with a few comboboxes and an "Unselect" button. The comboboxes run queries on the data and the button clears the selections. I need the "Unselect" button to clear the comboboxes of their entries. I've tried both of these options: 1) Self.Editable=False, then the selection in the comboboxes disappear when the user selects something. That's what I posted this question in regards to. 2) Self.Editable=True, then the selection remains visible, but I can't get it to clear when the "Unselect" button is clicked, even when the selection is cleared. (Code below) So, edit=true, can't get the unselect to clear the combobox, edit = false, the selection in the combobox automatically disappears. Frustrating, huh? Any other thoughts? class ButtonUnselect(object):
"""Implementation for Walla_Walla_QueryTool_addin.button (Button)"""
def __init__(self):
self.enabled = True
self.checked = False
def onClick(self):
self.mxd = arcpy.mapping.MapDocument('current')
lyr = arcpy.mapping.ListLayers(self.mxd, "PODs")[0]
lyr2 = arcpy.mapping.ListLayers(self.mxd, "POUs")[0]
lyr3 = arcpy.mapping.ListLayers(self.mxd, "Management_Points")[0]
arcpy.SelectLayerByAttribute_management(lyr, "CLEAR_SELECTION")
arcpy.SelectLayerByAttribute_management(lyr2, "CLEAR_SELECTION")
arcpy.SelectLayerByAttribute_management(lyr3, "CLEAR_SELECTION")
df = arcpy.mapping.ListDataFrames(self.mxd)[0]
ext = lyr2.getExtent()
df.extent = ext
combobox_2.__init__
ComboBoxPriorityDateRange.__init__
combobox_5.__init__
... View more
05-20-2014
12:52 PM
|
0
|
0
|
830
|
POST
|
I'm using ArcGIS 10.2.1 and have written an Arcpy addin with multiple comboboxes. I need most of my comboboxes to be non-editable. However, when I set self.editable = false and a selection is made I cannot get this selection to stay visible in the combobox. A subset of my code is below: class ComboBoxOwnerName(object): """Implementation for QueryTool_addin.combobox_2 (ComboBox)""" def __init__(self): self.editable = False self.enabled = True self.dropdownWidth = 'WWWWWWWWWWWWWWWWWWWWWWWWWWWW' self.width = 'WWWWWWWWWWWWWWWWWW' self.mxd = arcpy.mapping.MapDocument('current') layer4 = arcpy.mapping.ListLayers(self.mxd, "PODs")[0] layer4_path= layer4.dataSource self.items = [] values = [row[0] for row in arcpy.da.SearchCursor(layer4_path, ["Person"])] for uniqueVal in sorted(set(values)): self.items.append(uniqueVal) print "__init__" def onSelChange(self, selection): self.mxd = arcpy.mapping.MapDocument('current') layer1 = arcpy.mapping.ListLayers(self.mxd, "PODs")[0] layer2 = arcpy.mapping.ListLayers(self.mxd, "POUs")[0] arcpy.SelectLayerByAttribute_management(layer1, "NEW_SELECTION", "Person = '" + selection + "'") arcpy.SelectLayerByAttribute_management(layer2, "NEW_SELECTION", "Person = '" + selection + "'") df = arcpy.mapping.ListDataFrames(self.mxd)[0] layer1.getSelectedExtent() layer2.getSelectedExtent() df.zoomToSelectedFeatures() global currentselection currentselection = selection print currentselection print "Ran onSelChange" self.items = [selection] def onEditChange(self, text): pass def onFocus(self, focused): pass def onEnter(self): pass def refresh(self): self.mxd = arcpy.mapping.MapDocument('current') layer3 = arcpy.mapping.ListLayers(self.mxd, "PODs")[0] self.items = [currentselection] print "Ran refresh" Any thoughts would be appreciated!
... View more
05-15-2014
12:27 PM
|
0
|
5
|
1391
|
POST
|
Matt, Thanks so much for that option. I actually found a much easier way to implement this in Arcpy using the simple messagebox. I thought I couldn't use it to pass a variable, but I just had to convert the variable to a string and it works fine. I wouldn't classify it as refined, but it works just great for my purposes. That segment of my code is below: y = 0 TestString = str (y + 1) + ': ' + str(SelectedWRs ) + '= ' + str (Values ) + ' cfs' x = 1 counter = count.getOutput(0) counter2 = int (counter) while x < counter2: y += 1 TestString = TestString + '\n' + str (y + 1) + ': ' + str(SelectedWRs ) + '= ' + str (Values ) + ' cfs' x = x + 1 ProtectedWaterBoolean = pythonaddins.MessageBox('Selected Management Point: ' + str(selection) + '\n\n' + 'Water Rights with Protected Water on ' + str(SelectedDate) + ':' + '\n' + TestString + '\n\n' + 'Total CFS Protected: ' + str(ValuesSum) + '\n\n', 4)
... View more
05-08-2014
04:20 PM
|
0
|
0
|
3620
|
POST
|
Hi Matt, I have the output now as a feature layer, but still having problems with the reporting. Again, I just need to display the data to the user in a message box or table on the layout. The data is simply a list of records with values and ideally the sum of those values. Any thoughts on how to do this in arcpy (ArcMap 10.2.1)? (The dynamic tables won't work as I don't want to enable data driven pages.) Thanks!
... View more
05-06-2014
03:40 PM
|
0
|
0
|
3620
|
POST
|
Hi eibenm, Thanks so much for the response. I am writing an add-in in arcpy. Unfortunately, I can't use the visibility attribute as the field is user selected. I have a combobox that allows the user to select a date that corresponds to the field. I need to have something coded that automatically parses in this variable. I can't create a feature layer either as the input data is a table. Any other thoughts? Thanks, Katie
... View more
05-06-2014
10:36 AM
|
0
|
0
|
3620
|
POST
|
I apologize for the lack of clarity. My selected data is a table with 366 fields (an id and values for 365 days of the year). I need to display only the id and the value corresponding to the day of the year selected in the combobox. I can't seem to find a way to only display this selected data (without the other 364 days). I've tried to convert the table to a feature class in order to display attributes in a table but every conversion I've tried (to excel, to geodb, etc) has a record limit of 256 & there are no options to limit the field to my selected day. I've also tried reports, but have the same field number issue. I will take a look at the TkInter option too, was just hoping for an easier solution as I feel like I may be missing something simple. Thanks!
... View more
05-06-2014
08:37 AM
|
0
|
0
|
3620
|
POST
|
Hello, I have a Python Add-in Button that I've written to collect user input via comboboxes and then highlight the applicable data. I need to find a method to display the selected output data and just ONE of the fields. It doesn't have to be fancy, but I'm having a heck of a time trying to do so in any fashion. So far I've tried these routes: 1 - MessageBox: No option to pass a variable or outside data 2 - Report: My output is a table with many fields. I can't find a way to select only one field for the report. Also, it would be more ideal to not require the user to find and open a separate file. 3 - Text Element to Layout: I can't seem to get my selected data passed as a graphic element. . Any thoughts or suggestions would be greatly appreciated! Thanks, Katie
... View more
05-05-2014
01:25 PM
|
0
|
8
|
12344
|
POST
|
Success - finally! This was a struggle, and I'm sure there is a classier way, but this is the code that I got working. The only glitch is that the identify box expands the first layer (so you can see all selected records), but the second layer stays condensed. You have to manually click the "+" to expand after the script runs. Any thoughts on that? Imports ESRI.ArcGIS.ArcMapUI
Imports ESRI.ArcGIS.Carto
Imports ESRI.ArcGIS.Display
Imports ESRI.ArcGIS.CartoUI
Imports ESRI.ArcGIS.Geodatabase
Public Class ShowSelectedWR
Inherits ESRI.ArcGIS.Desktop.AddIns.Button
Dim pMxDoc As IMxDocument
Dim activeView As IMap
Sub test()
Dim pMxDoc As IMxDocument
Dim pActiveView As IActiveView
Dim pIdentifyDialog As IIdentifyDialog
Dim pIdentifyDialogProps As IIdentifyDialogProps
Dim pEnumLayer As IEnumLayer
Dim pLayer As ILayer2
Dim pFtrLyr As IFeatureLayer
Dim pFtrSel As IFeatureSelection
Dim pFtrCsr As IFeatureCursor
Dim pFtr As IFeature
pMxDoc = My.ArcMap.Application.Document
pActiveView = pMxDoc.FocusMap
pIdentifyDialog = New IdentifyDialog
pIdentifyDialogProps = pIdentifyDialog
pIdentifyDialog.Map = pMxDoc.FocusMap
pIdentifyDialog.Display = pActiveView.ScreenDisplay
pIdentifyDialog.ClearLayers()
pEnumLayer = pIdentifyDialogProps.Layers
pEnumLayer.Reset()
pLayer = pEnumLayer.Next
' Get a ref to the first layer
pFtrLyr = pMxDoc.FocusMap.Layer(0)
' Get a cursor on the selected features in this layer
pFtrSel = pFtrLyr
' Sets cursor to start at beginning of selected feature
pFtrSel.SelectionSet.Search(Nothing, False, pFtrCsr)
' loop thru selected features and display OID of each
pFtr = pFtrCsr.NextFeature
While Not pLayer Is Nothing
Do While Not pFtr Is Nothing
'MsgBox("Before pFtr NextFeature Call")
pIdentifyDialog.AddLayerIdentifyOID(pLayer, pFtr.OID)
Debug.Print(pFtr.OID)
pFtr = pFtrCsr.NextFeature
'MsgBox("End of First Loop")
Loop
' Loop to move through layers and NOT call identify loop unless
' there are selected records.
pLayer = pEnumLayer.Next
If Not pLayer Is Nothing Then
pFtrLyr = pLayer
pFtrSel = pFtrLyr
pFtrSel.SelectionSet.Search(Nothing, False, pFtrCsr)
Debug.Print(pFtrLyr.Name)
pFtr = pFtrCsr.NextFeature
End If
End While
pIdentifyDialog.Show()
End Sub
Public Sub New()
End Sub
Protected Overrides Sub OnClick()
test()
End Sub
Protected Overrides Sub OnUpdate()
Enabled = My.ArcMap.Application IsNot Nothing
End Sub
End Class
... View more
04-22-2014
08:22 AM
|
0
|
0
|
658
|
POST
|
Thanks Wayne! I'm working on the code now and will post when I have the final code working...or if I have any follow up questions. Thanks again! - Katie
... View more
04-21-2014
08:32 AM
|
0
|
0
|
658
|
POST
|
Hello, I'm brand new to ArcObjects SDKs and am struggling. I have a Python Add-in performing a query to select records (works great)and now trying to call the identify dialog via an .NET addin button that displays the identify dialog box to show attributes of the selected records. Below is the code I have at this point. I currently have the identify dialog displaying, but no records appearing. I know I need to input the selected records somewhere....but not sure where. Any thoughts would be appreciated. (I'm using Visual Studio/Microsoft Visual Basic 2010 and ArcGIS 10.2.1) Imports ESRI.ArcGIS.ArcMapUI
Imports ESRI.ArcGIS.Carto
Public Class Identify_Button
Inherits ESRI.ArcGIS.Desktop.AddIns.Button
Dim pMxDoc As IMxDocument
Dim activeView As IMap
Public Sub DoIdentify(ByVal activeView As ESRI.ArcGIS.Carto.IActiveView, ByVal x As System.Int32, ByVal y As System.Int32)
pMxDoc = My.ArcMap.Application.Document
activeView = pMxDoc.FocusMap
If activeView Is Nothing Then
Return
End If
Dim map As ESRI.ArcGIS.Carto.IMap = activeView.FocusMap
Dim identifyDialog As ESRI.ArcGIS.CartoUI.IIdentifyDialog = New ESRI.ArcGIS.CartoUI.IdentifyDialogClass
identifyDialog.Map = map
'Clear the dialog on each mouse click
identifyDialog.ClearLayers()
Dim screenDisplay As ESRI.ArcGIS.Display.IScreenDisplay = activeView.ScreenDisplay
Dim display As ESRI.ArcGIS.Display.IDisplay = screenDisplay ' Implicit Cast
identifyDialog.Display = display
Dim identifyDialogProps As ESRI.ArcGIS.CartoUI.IIdentifyDialogProps = CType(identifyDialog, ESRI.ArcGIS.CartoUI.IIdentifyDialogProps) ' Explicit Cast
Dim enumLayer As ESRI.ArcGIS.Carto.IEnumLayer = identifyDialogProps.Layers
enumLayer.Reset()
Dim layer As ESRI.ArcGIS.Carto.ILayer = enumLayer.Next
Do While Not (layer Is Nothing)
identifyDialog.AddLayerIdentifyPoint(layer, x, y)
layer = enumLayer.Next()
Loop
identifyDialog.Show()
End Sub
Public Sub New()
End Sub
Protected Overrides Sub OnClick()
DoIdentify(activeView, 300, 100)
End Sub
Protected Overrides Sub OnUpdate()
Enabled = My.ArcMap.Application IsNot Nothing
End Sub
End Class
... View more
04-17-2014
03:44 PM
|
0
|
3
|
3703
|
POST
|
Hello, I was attempting to customize a web application I have hosted through a Developer's account with ArcGIS.com. Is this possible - or do you have to have the application hosted locally in order to customize it (add logo, modify sidebars, etc)? Thanks so much! Thanks, Katie
... View more
01-07-2014
10:11 AM
|
0
|
0
|
660
|
POST
|
Hello, I was attempting to customize a web application I have hosted through a Developer's account with ArcGIS.com. Is this possible - or do you have to have the application hosted locally in order to customize it (add logo, modify sidebars, etc)? Thanks so much! Thanks, Katie
... View more
01-07-2014
08:51 AM
|
0
|
0
|
1832
|
POST
|
Hello all, I got the code working and wanted to share - in case it helps the next person down the road. I couldn't get the extension code, but this button works as well. A big clunkier, but works all the same. It was very simple in the end. Thanks so much Wayne and PSArcOnline! import arcpy import pythonaddins class Selection(object): """Implementation for SelectAllButton_addin.button (Button)""" def __init__(self): self.enabled = True self.checked = False def onClick(self): # Select all features (in Test there are no features with FID 0). arcpy.SelectLayerByAttribute_management ("XYMin_Max_Avg_Temp_with_Lat_Long","NEW_SELECTION","Station_Id"<>'0') pass
... View more
01-07-2014
08:46 AM
|
0
|
0
|
2097
|
POST
|
Amazing! I got it to work. What a happy camper I am right now! One little tweak would be nice though.... At this point, when the user selects a year, it works perfectly. BUT - the other years that were available before all disappear. For instance, a particular station has the following years of data: 2009, 2010, 2011. When you select 2009, the other years (2010 and 2011) are no longer displayed in the combo box. Is there a way upon selection to keep these other years still displayed? Thanks guys! Katie
... View more
12-28-2013
08:58 AM
|
0
|
0
|
1663
|
Online Status |
Offline
|
Date Last Visited |
11-11-2020
02:24 AM
|