Guest User

tkinter loop

a guest
Sep 20th, 2013
407
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.78 KB | None | 0 0
  1. import Tkinter
  2. import threading
  3. import subprocess
  4. import time
  5. import win32gui
  6. import win32con
  7.  
  8.  
  9. def main_program():
  10.     get_user_input()
  11.     before = find_open_windows()
  12.     launch_app_thread = threading.Thread(
  13.         target=launch_software)
  14.     launch_app_thread.start()
  15.     button_thread = threading.Thread(
  16.         target=InterruptButton)
  17.     button_thread.start()
  18.     wait_for_event()
  19.     after = find_open_windows()
  20.     close_recently_opened_windows(before, after)
  21.  
  22.  
  23. def find_open_windows():
  24.     list_of_open_windows = []
  25.     win32gui.EnumWindows(
  26.         lambda hwnd,
  27.         resultList: resultList.append(hwnd),
  28.         list_of_open_windows)
  29.     return list_of_open_windows
  30.  
  31.  
  32. def close_recently_opened_windows(before, after):
  33.     for handle in after:
  34.         if handle not in before:
  35.             try:
  36.                 win32gui.PostMessage(handle, win32con.WM_CLOSE, 0, 0)
  37.             except:
  38.                 pass
  39.             time.sleep(.1)
  40.  
  41.  
  42. def wait_for_event():
  43.     print 'waiting for something important to happen'
  44.     while not important_event:
  45.         time.sleep(2)
  46.  
  47.  
  48. class InterruptButton(threading.Thread):
  49.     def __init__(self):
  50.         threading.Thread.__init__(self)
  51.         self.window = Tkinter.Tk()
  52.         self.window.geometry('+0+0')
  53.         self.window.overrideredirect(1)
  54.         self.button = Tkinter.Button(
  55.             self.window, text='Interrupt', command=self.interrupt)
  56.         self.button.configure(background='red')
  57.         self.button.pack()
  58.         self.window.mainloop()
  59.  
  60.     def interrupt(self):
  61.         print 'manually interrupted'
  62.         global important_event
  63.         important_event = True
  64.         print 'now', important_event
  65.         self.quit()
  66.  
  67.     def quit(self):
  68.         self.window.quit()
  69.  
  70.  
  71. def launch_software(test_program='notepad.exe', test_command='test.txt'):
  72.     subprocess.Popen([test_program, test_command])
  73.  
  74.  
  75. def get_user_input():
  76.     popup = GetUserInput()
  77.     if popup.command():
  78.         return popup.command()
  79.  
  80.  
  81. class GetUserInput:
  82.     def __init__(self):
  83.         self.master = Tkinter.Toplevel()
  84.         self.label = Tkinter.Label(self.master)
  85.         self.label.pack()
  86.         self.entry = Tkinter.Entry(self.master)
  87.         self.entry.pack()
  88.         self.button = Tkinter.Button(
  89.             self.master, text="OK", command=self.command,
  90.             default=Tkinter.ACTIVE)
  91.         self.button.pack()
  92.         self.master.mainloop()
  93.  
  94.     def command(self, event=None):
  95.         y = self.entry.get()
  96.         self.master.withdraw()
  97.         self.master.quit()
  98.         return y
  99.  
  100.  
  101. if __name__ == "__main__":
  102.     root = Tkinter.Tk()
  103.     root.withdraw()
  104.  
  105.     #important_event = False
  106.     #main_program()
  107.  
  108.     while True:
  109.         important_event = False
  110.         main_program()
Advertisement
Add Comment
Please, Sign In to add comment