控制脚本工具的进度条

``````'''
Demonstration script showing examples of using the progressor
Parameters:
n - number to count to (a good first choice is 10)
p - interval to count by (a good first choice is 1)
The various time.sleep() calls are just to slow the dialog down so you can view
messages and progressor labels.
'''
import arcpy
import time
n = arcpy.GetParameter(0)
p = arcpy.GetParameter(1)
loopTime = 0.3  # Loop iteration delay
arcpy.AddMessage("Running demo with: {} by {}\n".format(n, p))
# Start by showing the default progress dialog, where the progress bar goes
# back and forth. Note how the progress label mimics working through some
# "phases", or chunks of work that a script may perform.
arcpy.SetProgressor("default", "This is the default progressor")
for i in range(1, 4):
arcpy.SetProgressorLabel("Working on 'phase' {}".format(i))
# Setup the progressor with its initial label, min, max, and interval
arcpy.SetProgressor("step",
"Step progressor: Counting from 0 to {}".format(n),
0, n, p)
# Loop issuing a new label when the increment is divisible by the value of
# countBy (p). The "%" is Python's modulus operator - we only update the
# position every p'th iteration.
for i in range(n):
if (i % p) == 0:
arcpy.SetProgressorLabel("Iteration: {}".format(i))
arcpy.SetProgressorPosition(i)
time.sleep(loopTime)
# Update the remainder that may be left over due to modulus operation.
arcpy.SetProgressorLabel("Iteration: {}".format(i + 1))
arcpy.SetProgressorPosition(i + 1)

最大值可能很大时选择一个合适的增量

``````'''
Demonstrates a step progressor by looping through records on a table. Use a
table with 10,000 or so rows - smaller tables will finish too quickly to assess.
1 = table name
2 = field on the table
'''
import arcpy
import time
import math
try:
inTable = arcpy.GetParameterAsText(0)
inField = arcpy.GetParameterAsText(1)
# Determine number of records in table
record_count = int(arcpy.GetCount_management(inTable)[0])
if record_count == 0:
raise ValueError("{} has no records to count".format(inTable))
# Method 1: Calculate and use a suitable base 10 increment
# ========================================================
p = int(math.log10(record_count))
if not p:
p = 1
increment = int(math.pow(10, p - 1))
arcpy.SetProgressor(
"step", "Incrementing by {} on {}".format(increment, inTable),
0, record_count, increment)
beginTime = time.clock()
with arcpy.da.SearchCursor(inTable, [inField]) as cursor:
for i, row in enumerate(cursor, 0):
if (i % increment) == 0:
arcpy.SetProgressorPosition(i)
fieldValue = row[0]
arcpy.SetProgressorPosition(i)
# Method 2: let's just move in 10 percent increments
# ==================================================
increment = int(record_count / 10.0)
arcpy.SetProgressor(
"step", "Incrementing by {} on {}".format(increment, inTable),
0, record_count, increment)
beginTime = time.clock()
with arcpy.da.SearchCursor(inTable, [inField]) as cursor:
for i, row in enumerate(cursor, 0):
if (i % increment) == 0:
arcpy.SetProgressorPosition(i)
fieldValue = row[0]
arcpy.SetProgressorPosition(i)
# Method 3: use increment of 1
# ============================
increment = 1
arcpy.SetProgressor("step",
"Incrementing by 1 on {}".format(inTable),
0, record_count, increment)
beginTime = time.clock()
with arcpy.da.SearchCursor(inTable, [inField]) as cursor:
for row in cursor:
arcpy.SetProgressorPosition()
fieldValue = row[0]
arcpy.SetProgressorPosition(record_count)
arcpy.ResetProgressor()