class MainWindow(QMainWindow): def __init__(self, settings, listener): super().__init__() self.settings = settings self.listener = listener self.setWindowTitle('Eule.py') self.table_widget = TableWidget(self) self.setCentralWidget(self.table_widget) self.locate_to_center() self.status_thread = KThread(target=self.set_status) self.status_thread.start() def locate_to_center(self): qtRectangle = self.frameGeometry() centerPoint = QDesktopWidget().availableGeometry().center() qtRectangle.moveCenter(centerPoint) self.move(qtRectangle.topLeft()) def set_status(self): while True: self.table_widget.main_page_tab.diablo_hooked.setChecked( win32gui.FindWindow('D3 Main Window Class', 'Diablo III')) sleep(1) def closeEvent(self, event): self.settings.save() self.listener.thread.terminate() self.listener.image_recognition_thread.terminate() self.status_thread.terminate() sys.stdout = sys.__stdout__ super().closeEvent(event)
class DefaultKThreadTestCase(unittest.TestCase): def setUp(self): self.kthread = KThread(name = "DefaultKThreadTestThread", target = infinite_loop_func) def runTest(self): self.kthread.start() self.assertTrue(self.kthread.isAlive(), "KThread failed to start") # let it run for some time time.sleep(5) self.kthread.terminate() # give it time to process exception time.sleep(1) self.assertFalse(self.kthread.isAlive(), "KThread failed to stop") def tearDown(self): self.kthread.join() self.kthread = None