Solved! Go to Solution.
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) 
from Tkinter import *
from ttk import *
import tkMessageBox
class DisplayResults():
    def __init__(self):
    
        self.root = Tk()
        self.root.title("Geoprocessing Results")
        self.root.minsize(width=770, height=300)
        self.root.config(padx=10, pady=10)
        Style().configure(".", font=("Helvetica", 10))
        
        self.frame = Frame()
        self.frame.pack(fill="both", expand=1)
    
        self.createWidgets()
        
        self.root.protocol("WM_DELETE_WINDOW", self.quitCallback)
        
    def createWidgets(self):
    
        self.textbox = Text(self.frame, height=20, width=120, relief="sunken", state="normal")
        self.textbox.pack(fill="both", expand=1)
        self.yscrollbar = Scrollbar(self.textbox, orient="vertical", cursor="arrow" ,command=self.textbox.yview)
        self.yscrollbar.pack(side="right", fill="y")
        self.textbox["yscrollcommand"]=self.yscrollbar.set
        
    def printToScreen(self, content):
    
        self.textbox.insert("end", content + "\n")
        
    def quitCallback(self):
        """
        If user closes the prompt window, the program will exit on 'OK'
        """
        if tkMessageBox.askokcancel("Quit", "Do you really wish to quit?"):
            self.root.destroy()
            sys.exit(1)
gui = DisplayResults()
gui.printToScreen("data")
gui.root.mainloop()
					
				
			
			
				
			
			
				
			
			
			
			
			
			
		visibleFields = ["ID", "DesiredField1", "DesiredField2"]
field_info = arcpy.Describe("FeatureLayer").fieldInfo
for index in xrange(0, field_info.count):
    if field_info.getfieldname(index) not in visibleFields:
        field_info.setvisible(index,"HIDDEN")
arcpy.MakeFeatureLayer_management("FeatureLayer","Feature_Layer_With_New_Visibilities","","",field_info)
# Run your reporting process on your new feature layer
# Clean up your feature layer with new visibilities when you're done with it.
arcpy.Delete_management("Feature_Layer_With_New_Visibilities")
dateField = # Method to get the date field you want
# Method that puts each row into a dictionary
def rows_as_dicts(cursor):
    colnames = cursor.fields
    for row in cursor:
        yield dict(zip(colnames, row))
# Record of the data you want in your new table
fields = ["id",dateField]
data = [row for row in rows_as_dicts(arcpy.da.SearchCursor("Your Table",fields))
# Create your new table -- Mine is "in_memory"
table = arcpy.CreateTable_management("in_memory", tableName)
arcpy.AddField_management(table, "id", "LONG", 9)
arcpy.AddField_management(table, dateField, "TEXT")
# Populate your table
with arcpy.da.InsertCursor(table, fields) as cursor:
    for row in data:
        cursor.insertRow([row["id"], row[dateField]])
# Run your reporting with your new in_memory table
# Clean up your temporary table
arcpy.Delete_management(table)import arcpy
import pythonaddins
import pickle, os
from subprocess import Popen, PIPE
class YourPythonAddinClass(object):
    """
    Implementation for Create_New_Point_addin.createNewXYPoint (Button)
    """
    def __init__(self):
        ...
        ...
        ...
    def yourOnClickFunction(self):
        featureClass = arcpy.mapping.Layer("Your Feature Class")
        dateField = # Method to get the date field you want
        fields = ["id",dateField]
        data = [row for row in arcpy.da.SearchCursor(featureClass,fields)]
        data.insert(0, tuple(fields))
        dataDumpFile = os.path.join(os.path.dirname(os.path.abspath(__file__)), "datadump.p")
        pickle.dump(data, open(dataDumpFile,"wb"))
        open_GUI("listViewGUI.py",dataDumpFile)
def open_GUI(gui_file_name, file_location):
    file_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), gui_file_name)
    proc = Popen([file_path,file_location], shell=True, stdout=PIPE, bufsize=1)
    stdoutdata, stderrdata = proc.communicate()
    return stdoutdata
import Tkinter as tk
import tkFont, ttk, tkMessageBox
import math, pickle, sys
class ListBox(object):
    """use a ttk.TreeView as a multicolumn ListBox"""
    sampleHeader = ["Column 1","Column 2"]
    sampleData = [("data1","data1"),("data2","data2")]
    def __init__(self, header=sampleHeader, data=sampleData):
        self.root = tk.Tk()
        self.root.wm_title("Table Output")
        self.root.minsize(width=300, height=300)
        ttk.Style().configure('.', font=('Courier', 10))
        self.header = header
        self.data = data
        self.tree = None
        self._setup_widgets()
        self._build_tree()
        self.root.protocol("WM_DELETE_WINDOW", self.quitCallback)
        self.root.mainloop()
    def _setup_widgets(self):
        container = ttk.Frame()
        container.pack(fill='both', expand=True)
        # create a treeview with dual scrollbars
        self.tree = ttk.Treeview(columns=self.header, show="headings")
        vsb = ttk.Scrollbar(orient="vertical", command=self.tree.yview)
        self.tree.configure(yscrollcommand=vsb.set)
        self.tree.grid(column=0, row=0, sticky='nsew', in_=container)
        vsb.grid(column=1, row=0, sticky='ns', in_=container)
        container.grid_columnconfigure(0, weight=1)
        container.grid_rowconfigure(0, weight=1)
    def _build_tree(self):
        for col in self.header:
            self.tree.heading(col, text=col.title())
            # adjust the column's width to the header string
            self.tree.column(col, width=tkFont.Font().measure(col.title()))
        for item in self.data:
            self.tree.insert('', 'end', values=item)
            # adjust column's width if necessary to fit each value
            for ix, val in enumerate(item):
                col_w = tkFont.Font().measure(val)
                if self.tree.column(self.header[ix], width=None) < col_w:
                    self.tree.column(self.header[ix], width=int(math.floor(col_w * 1.75)))
    def quitCallback(self):
        """
        If user closes the prompt window, the program will exit on 'OK'
        """
        if tkMessageBox.askokcancel("Quit", "Do you really wish to quit?"):
            self.root.destroy()
            sys.exit(1)
def main(argv):
    data = pickle.load(open(argv[1], "rb"))
    header = data[0]
    data_list = data[1:]
    guiTable = ListBox(header=header, data=data_list)
main(sys.argv)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) 
