ipython / ipython/ipykernel

printing from custom loop

未關閉
#1,083 0 則留言 0 個 reaction 已指派 0 人 在 GitHub 檢視
主要語言
Python
星號
734
分支
412
平均合併
1 天 5 小時
30 天內合併 PR
8

描述

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:

貢獻指南

開啟貢獻指南

研究方向

Start by reading ipykernel/eventloops.py alongside the custom loop's cb() call and kernel.shell_stream.flush(limit=1) handling. Reproduce the %gui imgui flow in either the Jupyter web UI or IntelliJ IDEA, then verify that print('123') from imgui_app() appears before the app closes.

由索引模型根據 Issue 內容生成。

評估

技術堆疊
jupyter, python
領域
backend, tooling
Issue 類型
缺陷
難度
3/5
預估耗時
1-2 天
活躍度
停滯
描述清晰度
基本清楚
新手友好度
38/100

把新 issue 寄到你的電子郵件信箱

精選適合新手參與的 GitHub issue 摘要。