Clipboard detector in Python
Don't use threads

You don't need the complexities of threading for this problem. You can use the Tkinter method after to run a function periodically. Threading is necessary if the function you are running takes a long time, but that is not the case here.

You can use a class, but to keep this answer simple I'll only show the function.

Also, note that I use an existing window rather than tkinter.Tk() on each call. There's no need to create a new root window every time you do the check.

def check_clipboard(window):
    temp_value = window.clipboard_get()
    ...


Next, create a function that calls this function every half second:

def run_listener(window, interval):
    check_clipboard(window)
    root.after(interval, run_listener, window, interval)


To start running, simply call run_listener once, and it will continue to run every 500 milliseconds:

run_listener(root, 500)


The logic to stop and pause is roughly the same as what you have now. Create a flag, and then check that flag inside of run_check_periodically.

With this, you can remove the loop from main since tkinter already has an efficient loop:

def main():
    root = tkinter.Tk()
    gui = GUI(root)

    # start the listener
    listen_to_clipboard(root)

    # start the GUI loop
    root.mainloop()