trio-gtk/trio_gtk.py

35 lines
731 B
Python
Raw Permalink Normal View History

2020-09-20 21:45:24 +00:00
import traceback
import gi
import trio
gi.require_version("Gtk", "3.0")
from gi.repository import GLib as glib
from gi.repository import Gtk as gtk
2020-09-20 21:45:24 +00:00
from outcome import Error
__all__ = ["run"]
def run(trio_main):
"""Run Trio and PyGTK together."""
def done_callback(outcome):
2020-09-20 21:45:24 +00:00
if isinstance(outcome, Error):
exc = outcome.error
traceback.print_exception(type(exc), exc, exc.__traceback__)
gtk.main_quit()
def glib_schedule(function):
glib.idle_add(function)
trio.lowlevel.start_guest_run(
2020-09-20 22:03:42 +00:00
trio_main,
run_sync_soon_threadsafe=glib_schedule,
done_callback=done_callback,
host_uses_signal_set_wakeup_fd=True,
)
gtk.main()