ipython / ipython/ipykernel

printing from custom loop

Open
#1,083 0 comments 0 reactions 0 assignees View on GitHub
Dominant language
Python
Stars
734
Forks
412
Avg merge
1d 5h
Merged PRs (30d)
8

Description

I made a custom event loop for Dear ImGui. Everything works fine, except i can not find a way to produce any output from within the loop where UI code runs. This is the loop:
```py
from ipykernel.eventloops import register_integration

@register_integration('imgui')
def loop_imgui(kernel):
import imgui
app = None
try:
while not kernel.shell.exit_now:
if len(imgui._ipython_callbacks) > 0:
title, cb = imgui._ipython_callbacks[0]
if app is None:
app = imgui.DearImGuiApp(title)

do_continue = False
if app.begin_frame():
try:
do_continue = cb()
finally:
app.end_frame()

if not do_continue:
app.close()
app = None
del imgui._ipython_callbacks[0]

if kernel.shell_stream.flush(limit=1):
break
except Exception as e:
kernel.log.exception(e)
finally:
imgui._ipython_callbacks = []
if app is not None:
app.close()
app = None

@loop_imgui.exit
def loop_imgui_exit(kernel):
pass

def load_ipython_extension(ipython):
pass

def unload_ipython_extension(ipython):
pass
```

I use it as follows:
```py
%load_ext imgui_loop
%gui imgui

import imgui

@imgui.ipython_window('Charts')
def imgui_app():
print('123')
return False
```

Im sorry about this code not being testable as i do not have all parts available on github.. But basically `imgui_app()` gets called on the line `do_continue = cb()` in the loop code. It should print '123' and then imgui app gets closed. I do not see any text printed though, documentation mentions nothing about it either and `ipykernel/eventloops.py` does imply printing should just work..? But somehow it does not. I tested it from IntelliJ IDEA as well as from Jupyter web UI - result is same. Other than this, imgui UI works just fine. Any ideas what i could be missing?

Thanks :pray:

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.