def mouseDoubleClickEvent(self, *args, **kwargs): @long_task(self, "decorator(without cancel)", False) def task1a(sec): t = time.time() while time.time() - t < sec: pass return "result of task1a" @long_task(self, "decorator(with cancel)", True) def task1b(sec, cancel_event): t = time.time() while time.time() - t < sec: if cancel_event.isSet(): break return "result of task1b" def task2a(sec): t = time.time() while time.time() - t < sec: pass return "result of task2a" def task2b(sec, cancel_event): t = time.time() while time.time() - t < sec: if cancel_event.isSet(): break return "result of task2b" def task3a(callback, sec): t = time.time() while time.time() - t < sec: callback(time.time() - t, t + sec) time.sleep(.1) return "result of task2b" def task3b(callback, sec): try: t = time.time() while time.time() - t < sec: callback(time.time() - t, t + sec) #if cancel_event.isSet(): # break time.sleep(.1) return "result of task2b" except CancelWarning: return "Cancelled" # # print (task1a(1)) # # try: # print (task1b(3)) # except CancelWarning: # print ("task1b cancelled") # # # print (self.exec_long_task("exec_long_task(without cancel)", False, task2a, 1)) # # try: # print (self.exec_long_task("exec_long_task(with cancel", True, task2b, 5)) # except CancelWarning: # print ("task2 cancelled") # # for x in self.progress_iterator(range(100), "progressbar(without cancel)", False): t = time.time() while time.time() - t < .01: pass if x > 80: raise Exception try: for _ in self.progress_iterator(range(100), "progressbar(with cancel)", True): t = time.time() while time.time() - t < .05: pass except CancelWarning: print ("progressbar cancelled") return QMainWindow.mouseDoubleClickEvent(self, *args, **kwargs)