Advertisement
Guest User

Untitled

a guest
Nov 3rd, 2015
103
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.80 KB | None | 0 0
  1. from threading import Thread
  2. from Queue import Queue
  3. from Tkinter import Tk, Label, Button, Entry, Text, END, DISABLED, NORMAL
  4. import time
  5.  
  6. requests = Queue()
  7. responses = Queue()
  8.  
  9. def logic():
  10. while True:
  11. gui_print("Enter three numbers.")
  12. a = get_gui_input("first number:")
  13. b = get_gui_input("second number:")
  14. c = get_gui_input("third number:")
  15. gui_print("Calculating...")
  16. time.sleep(2)
  17. gui_print("their sum is {}".format(int(a)+int(b)+int(c)))
  18. if get_gui_input("Continue?").lower() == "n":
  19. break
  20.  
  21. def gui_print(s):
  22. requests.put(("print", s))
  23.  
  24. def get_gui_input(prompt=""):
  25. requests.put(("input", prompt))
  26. return responses.get()
  27.  
  28.  
  29. business_logic = Thread(target=logic)
  30. business_logic.daemon = True
  31. business_logic.start()
  32.  
  33. def idle():
  34. if not requests.empty():
  35. kind, s = requests.get()
  36. if kind == "print":
  37. print_area.insert('end', s + "\n")
  38. elif kind="input":
  39. input_prompt_label.config(text=s)
  40. button.config(state=NORMAL)
  41. else:
  42. raise Exception("Unknown request type {}".format(kind))
  43. if business_logic.is_alive():
  44. root.after(100, idle)
  45. else:
  46. root.destroy()
  47.  
  48. def clicked():
  49. text = response_entry.get()
  50. print_area.delete('1.0', END)
  51. response_entry.delete(0, END)
  52. responses.put(text)
  53. input_prompt_label.config(text="")
  54. button.config(state=DISABLED)
  55.  
  56. root = Tk()
  57.  
  58. print_area = Text(root, height=10)
  59. print_area.pack()
  60.  
  61. input_prompt_label = Label(root)
  62. input_prompt_label.pack()
  63.  
  64. response_entry = Entry(root)
  65. response_entry.pack()
  66.  
  67. button = Button(root, text="submit", command=clicked, state=DISABLED)
  68. button.pack()
  69.  
  70. root.after(100, idle)
  71. root.mainloop()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement