Last active
July 22, 2020 22:49
-
-
Save nosklo/af157fd26c3f927d4c173b8ed0c04dff to your computer and use it in GitHub Desktop.
pygobject-gtk3-trio-guest-mode
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import trio | |
import gi | |
def gtk_main_trio_run(main_window, trio_func): | |
from gi.repository import GLib, Gtk | |
_outcome = None | |
window_close_scope = None | |
async def trio_context(): | |
nonlocal window_close_scope | |
with trio.CancelScope() as window_close_scope: | |
return await trio_func() | |
raise RuntimeError('Window was closed') | |
def done_callback(_out): | |
nonlocal _outcome | |
_outcome = _out | |
Gtk.main_quit() | |
main_window.connect("destroy", lambda *args: window_close_scope.cancel()) | |
trio.lowlevel.start_guest_run( | |
trio_context, | |
run_sync_soon_threadsafe=GLib.idle_add, | |
done_callback=done_callback, | |
host_uses_signal_set_wakeup_fd=True, | |
) | |
Gtk.main() | |
return _outcome.unwrap() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import gi | |
gi.require_version("Gtk", "3.0") | |
from gi.repository import Gtk | |
import trio | |
import gtriok | |
win = Gtk.Window() | |
pb = Gtk.ProgressBar() | |
win.add(pb) | |
win.show_all() | |
async def job(): | |
for n in range(1, 1001): | |
await trio.sleep(0.02) | |
pb.set_fraction(n/1000) | |
await trio.sleep(0.1) | |
return "OK!" | |
result = gtriok.gtk_main_trio_run(win, job) # Gtk.main() | |
print(result) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment