Close app on last window exit
Use a system triggered SIGINT on app close to tear down the streaming stack and terminate the `trio`/`tractor` runtimes deterministically.tina_free_vwap
							parent
							
								
									c8073ad891
								
							
						
					
					
						commit
						be18c75428
					
				| 
						 | 
					@ -20,6 +20,8 @@ Trio - Qt integration
 | 
				
			||||||
Run ``trio`` in guest mode on top of the Qt event loop.
 | 
					Run ``trio`` in guest mode on top of the Qt event loop.
 | 
				
			||||||
All global Qt runtime settings are mostly defined here.
 | 
					All global Qt runtime settings are mostly defined here.
 | 
				
			||||||
"""
 | 
					"""
 | 
				
			||||||
 | 
					import os
 | 
				
			||||||
 | 
					import signal
 | 
				
			||||||
from functools import partial
 | 
					from functools import partial
 | 
				
			||||||
import traceback
 | 
					import traceback
 | 
				
			||||||
from typing import Tuple, Callable, Dict, Any
 | 
					from typing import Tuple, Callable, Dict, Any
 | 
				
			||||||
| 
						 | 
					@ -74,11 +76,16 @@ class MainWindow(QtGui.QMainWindow):
 | 
				
			||||||
        self.setMinimumSize(*self.size)
 | 
					        self.setMinimumSize(*self.size)
 | 
				
			||||||
        self.setWindowTitle(self.title)
 | 
					        self.setWindowTitle(self.title)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def closeEvent(self, event: 'QCloseEvent') -> None:
 | 
					    def closeEvent(
 | 
				
			||||||
 | 
					        self,
 | 
				
			||||||
 | 
					        event: 'QCloseEvent'
 | 
				
			||||||
 | 
					    ) -> None:
 | 
				
			||||||
        """Cancel the root actor asap.
 | 
					        """Cancel the root actor asap.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        """
 | 
					        """
 | 
				
			||||||
        tractor.current_actor().cancel_soon()
 | 
					        # raising KBI seems to get intercepted by by Qt so just use the
 | 
				
			||||||
 | 
					        # system.
 | 
				
			||||||
 | 
					        os.kill(os.getpid(), signal.SIGINT)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def run_qtractor(
 | 
					def run_qtractor(
 | 
				
			||||||
| 
						 | 
					@ -128,11 +135,15 @@ def run_qtractor(
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def done_callback(outcome):
 | 
					    def done_callback(outcome):
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        print(f"Outcome: {outcome}")
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        if isinstance(outcome, Error):
 | 
					        if isinstance(outcome, Error):
 | 
				
			||||||
            exc = outcome.error
 | 
					            exc = outcome.error
 | 
				
			||||||
            traceback.print_exception(type(exc), exc, exc.__traceback__)
 | 
					
 | 
				
			||||||
 | 
					            if isinstance(outcome.error, KeyboardInterrupt):
 | 
				
			||||||
 | 
					                # make it look like ``trio``
 | 
				
			||||||
 | 
					                print("Aborted!")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            else:
 | 
				
			||||||
 | 
					                traceback.print_exception(type(exc), exc, exc.__traceback__)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        app.quit()
 | 
					        app.quit()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -144,9 +155,6 @@ def run_qtractor(
 | 
				
			||||||
    instance = main_widget()
 | 
					    instance = main_widget()
 | 
				
			||||||
    instance.window = window
 | 
					    instance.window = window
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    # kill the app when root actor terminates
 | 
					 | 
				
			||||||
    tractor._actor._lifetime_stack.callback(app.quit)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    widgets = {
 | 
					    widgets = {
 | 
				
			||||||
        'window': window,
 | 
					        'window': window,
 | 
				
			||||||
        'main': instance,
 | 
					        'main': instance,
 | 
				
			||||||
| 
						 | 
					@ -170,6 +178,7 @@ def run_qtractor(
 | 
				
			||||||
        main,
 | 
					        main,
 | 
				
			||||||
        run_sync_soon_threadsafe=run_sync_soon_threadsafe,
 | 
					        run_sync_soon_threadsafe=run_sync_soon_threadsafe,
 | 
				
			||||||
        done_callback=done_callback,
 | 
					        done_callback=done_callback,
 | 
				
			||||||
 | 
					        # restrict_keyboard_interrupt_to_checkpoints=True,
 | 
				
			||||||
    )
 | 
					    )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    window.main_widget = main_widget
 | 
					    window.main_widget = main_widget
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue