I’m new to python and I have been trying to find a simple way to pause an operating while-loop, making it possible to start it again from where it was paused. I have searched on Google for help and tips, but everything I find seems very complex. Is there a simple way to do this?
I’ve read that you can use termios and tkinter.
I’m using ubuntu.
Advertisement
Answer
Here’s a simple tkinter program that runs in an infinite loop. Pressing space pauses/unpauses it, and pressing Esc quits.
Note: The following is for Python 2.x, if you’re using Python 3, change Tkinter in the first line to tkinter (lower case t).
from Tkinter import *
import time
class MyLoop():
    def __init__(self, root):
        self.running = True
        self.aboutToQuit = False
        self.root = root
        self.someVar = 0
        self.root.bind("<space>", self.switch)
        self.root.bind("<Escape>", self.exit) 
        while not self.aboutToQuit:
            self.root.update() # always process new events
            if self.running:
                # do stuff
                self.someVar += 1
                print(self.someVar)
                time.sleep(.1)
            else: # If paused, don't do anything
                time.sleep(.1)
    def switch(self, event):
        print(['Unpausing','Pausing'][self.running])
        self.running = not(self.running)
    def exit(self, event):
        self.aboutToQuit = True
        self.root.destroy()
if __name__ == "__main__":
    root = Tk()
    root.withdraw() # don't show the tkinter window
    MyLoop(root)
    root.mainloop()
This is a possible output, where I manually paused and unpaused the program twice before I quit.
1 2 3 4 5 6 7 Pausing Unpausing 8 9 10 11 12 13 14 15 16 Pausing Unpausing 17 18 19 20 21 22 23 24 25