概要
gradioで独自のhtmlを書きたいときに、gr.HTMLがなぜか機能せず、代わりにgr.Markdownを使ってなんとかしたという備忘録です。
gradioに入門したばかりなので、なにか初歩的な勘違い・ミスをしていたらすみません。
環境
macOSで実行し、Chromeで閲覧しました。
% sw_vers
ProductName: macOS
ProductVersion: 12.4
BuildVersion: 21F79
% /Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --version
Google Chrome 109.0.5414.119
% python -V
Python 3.10.2
% pip list | grep gradio
gradio 3.16.2
経緯
gradioがとても簡単なのでなるべくgradioでアプリを作りたかったのですが、一部、gradioのコンポーネントでは対応できない機能をつけたかったので、独自のHTMLを挿入する方法を試行錯誤していました。
試したこと
gr.HTMLというコンポーネントがあったので使ってみたのですが、なぜか期待通りの表示になりませんでした。例えば、h1タグもh3タグも同じ大きさで表示されてしまいます。
そこで、gr.Markdownの中にhtmlを書いてみたところ、こちらは上手く機能しているようでした。
以下が例です。
import gradio as gr
html_text = "<h1>h1 text</h1><h3>h3 text</h3>"
with gr.Blocks() as demo:
with gr.Row():
with gr.Column():
gr.Markdown("gr.HTML")
html = gr.HTML(html_text)
with gr.Column():
gr.Markdown("gr.Markdown")
markdown = gr.Markdown(html_text, label="Markdown")
demo.launch()
出力は以下です。
gr.HTMLではh1もh3も同じサイズであるのに対し、gr.Markdownでは適切なサイズで表示されています。
Chromeの「検証」機能で確認する限りではgr.HTMLのほうもh1, h3タグで埋め込まれてはいるようです。謎です。
今ひとつ釈然としませんが、任意のhtml要素を組み込みたいときはgr.Markdownを使おうと思います。