I'm working on a tkinter GUI to ease the operation of some scripts that are meant to both send signals to an Allen-Bradley PLC to write tag values and also read other tags repeatedly in a logging file. I want to have something in a tkinter window that would have the same behavior as using the terminal in this way: print("Log script starting") logger = subprocess.Popen(*start logging args*) time.sleep(3) plc.write((onTag, 1)) print("Cycle started\nCycle running...") time.sleep(cycle_runtime) print("Cycle finished") logger.stop() Can tkinter.after() be called multiple times, one after the other, and have those events happen similar to above? Or does each tkinter.after() call need to have the time based on a shared starting time, i.e.: logStartWidget.grid() widget.after(3000, lambda: plc.write((onTag,1))) cycleStartWidget.grid() # will this happen immediately after logStartWidget.grid(), or # wait for the "after" call to happen? cycleRunningWidget.grid() widget.after(3000+cycle_runtime*1000, lambda: plc.write((onTag, 0))) # does the time # here start at the same time as the previous after() call or after it returns? Continue reading...