messagebox.py 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. # coding: utf-8
  2. #
  3. import time
  4. try:
  5. import Tkinter as tk
  6. except ImportError:
  7. import tkinter as tk
  8. def retryskipabort(message, timeout=20):
  9. """
  10. Show dialog of RETRY,SKIP,ABORT
  11. Returns:
  12. one of "retry", "skip", "abort"
  13. """
  14. root = tk.Tk()
  15. root.geometry("400x200")
  16. root.title("Exception handle")
  17. root.eval('tk::PlaceWindow %s center' % root.winfo_pathname(root.winfo_id()))
  18. root.attributes("-topmost", True)
  19. _kvs = {"result": "abort"}
  20. def cancel_timer(*args):
  21. root.after_cancel(_kvs['root'])
  22. root.title("Manual")
  23. def update_prompt():
  24. cancel_timer()
  25. def f(result):
  26. def _inner():
  27. _kvs['result'] = result
  28. root.destroy()
  29. return _inner
  30. tk.Label(root, text=message).pack(side=tk.TOP, fill=tk.X, pady=10)
  31. frmbtns = tk.Frame(root)
  32. tk.Button(frmbtns, text="Skip", command=f('skip')).pack(side=tk.LEFT)
  33. tk.Button(frmbtns, text="Retry", command=f('retry')).pack(side=tk.LEFT)
  34. tk.Button(frmbtns, text="ABORT", command=f('abort')).pack(side=tk.LEFT)
  35. frmbtns.pack(side=tk.BOTTOM)
  36. prompt = tk.StringVar()
  37. label1 = tk.Label(root, textvariable=prompt) #, width=len(prompt))
  38. label1.pack()
  39. deadline = time.time() + timeout
  40. def _refresh_timer():
  41. leftseconds = deadline - time.time()
  42. if leftseconds <= 0:
  43. root.destroy()
  44. return
  45. root.title("Test will stop after " + str(int(leftseconds)) + " s")
  46. _kvs['root'] = root.after(500, _refresh_timer)
  47. _kvs['root'] = root.after(0, _refresh_timer)
  48. root.bind('<Button-1>', cancel_timer)
  49. root.mainloop()
  50. return _kvs['result']
  51. if __name__ == '__main__':
  52. print(retryskipabort('LKJSDF\nlkjj\what?lkjsdlfjaskdfjlasdkjflnice'))