It sounds like you want to "fork-and-exec" the second program, then it will run it's own mainloop in a separate process. If you just want a button to launch it, look at Tk::ExecuteCommand, which can be incorporated into your program #1, to launch program #2. Your big concern is whether you need "data" returned from prog #2 to be used by prog #1.