Hello Grant, Below is the entire bit of code I was working on at that time. Pay attention to the spawn_async stuff. Good luck!
-- Tony #!/usr/bin/python #################################################### ## THIS IS A GUI FRONT END TO THE adjust_grids.sh ## SCRIPT LOCATED IN /DATA/LOCAL/IFPS/ ## ## t0ny.fr33...@noaa.gov (26 July 2010) ## #################################################### #################################################### ## SETUP THE ENVIRONMENT: #################################################### import pygtk import gtk import gtk.glade import gobject import os os.chdir("/awips/dev/localapps/adjust_grids/") #################################################### ### GLOBAL VARIABLES AND SITE CONFIGURATION: #################################################### import siteConfig xxxxxx = siteConfig.xxxxxx guess = siteConfig.guess program = siteConfig.program ### GLOBAL VARIABLES: keep_pulsing = True #################################################### ### PULL IN THE GUI: #################################################### wTree = gtk.glade.XML('adjust_grids.glade') ### MAIN WINDOW ITEMS (window1): calendar = wTree.get_widget('calendar1') gridbox = wTree.get_widget('combobox_grid') modelbox = wTree.get_widget('combobox_model') hourbox = wTree.get_widget('combobox_hour') statusbar = wTree.get_widget('label_status') ### PROGRESS WINDOW ITEMS (window2): window2 = wTree.get_widget('window2') dialog1 = wTree.get_widget('dialog1') progressbar = wTree.get_widget('progressbar1') progress_headline = wTree.get_widget('label_progress_headline') progress_info = wTree.get_widget('label_progress_info') textview = wTree.get_widget('textview1') textbuffer=textview.get_buffer() #################################################### ### FILL IN THE LIST BOXES: #################################################### for i in xxxxxx: gridbox.append_text(i) for i in guess: modelbox.append_text(i) gridbox.set_active(0) modelbox.set_active(0) hourbox.set_active(0) #################################################### ### DEFINE FUNCTIONS: #################################################### def write_status(comment): statusbar.set_text(comment) progress_info.set_text(comment) def cstdout_callback(fd, condition, channel): global keep_pulsing if condition == gobject.IO_HUP: keep_pulsing=False elif condition == gobject.IO_IN: text = channel.readline() iter = textbuffer.get_end_iter() textbuffer.insert(iter, text) textview.scroll_to_mark(textbuffer.get_insert(),0) return keep_pulsing def update_progress_callback(): global keep_pulsing if keep_pulsing: progressbar.pulse() else: write_status("Done") window2.hide() return keep_pulsing def run_command(command): global keep_pulsing keep_pulsing=True textbuffer.set_text("") (cpid, cstdin, cstdout, cstderr) = gobject.spawn_async(command,flags=gobject.SPAWN_DO_NOT_REAP_CHILD,standard_output=True) channel = os.fdopen(cstdout) gobject.io_add_watch(cstdout, gobject.IO_HUP|gobject.IO_IN, cstdout_callback, channel) gobject.timeout_add(150, update_progress_callback) window2.show() def get_active_text(combobox): model = combobox.get_model() active = combobox.get_active() if active < 0: return None return model[active][0] def build_timestamp(): year, month, day = calendar.get_date() hour = get_active_text(hourbox) month = "%02d" % month day = "%02d" % day timestamp = str(year) + str(month) + str(day) + "_" + str(hour) return timestamp def on_dialog1_destroy(*args): write_status("Backgrounded script") dialog1.hide() def on_closebutton1_clicked(*args): write_status("Backgrounded script") dialog1.hide() def on_window1_destroy(*args): write_status("Good-bye!") gtk.main_quit() def on_window2_destroy(*args): window2.hide() dialog1.show() write_status("Continuing in background") return True def on_window2_delete_event(*args): window2.hide() dialog1.show() write_status("Continuing in background") return True def on_button_quit_clicked(*args): write_status("See ya next time") gtk.main_quit() def on_button_apply_clicked(*args): scripttime = build_timestamp() scriptmodel = get_active_text(modelbox) scriptgrid = get_active_text(gridbox) command = [program, scriptgrid, scriptmodel, scripttime] write_status("Here we go ...") run_command(command) #################################################### ### CONNECT SIGNALS TO OUR HANDLERS: #################################################### wTree.signal_autoconnect(locals()) #################################################### ### START UP THE PROGRAM: #################################################### gtk.main() On Wed, Aug 3, 2011 at 7:44 AM, Grant McWilliams <grantmasterfl...@gmail.com> wrote: > Tony Freeman <t0ny.fr33man <at> gmail.com> writes: > > Can you post the whole code anyway for those of us trying to figure out the > same > thing. > > _______________________________________________ > pygtk mailing list pygtk@daa.com.au > http://www.daa.com.au/mailman/listinfo/pygtk > Read the PyGTK FAQ: http://faq.pygtk.org/ > _______________________________________________ pygtk mailing list pygtk@daa.com.au http://www.daa.com.au/mailman/listinfo/pygtk Read the PyGTK FAQ: http://faq.pygtk.org/