2
0

More than 1 year has passed since last update.

【Python】gradioで任意のHTML要素を作りたいときはgr.HTMLではなくgr.Markdownを使う?

Posted at

概要

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では適切なサイズで表示されています。

image.png

Chromeの「検証」機能で確認する限りではgr.HTMLのほうもh1, h3タグで埋め込まれてはいるようです。謎です。

image.png

今ひとつ釈然としませんが、任意のhtml要素を組み込みたいときはgr.Markdownを使おうと思います。

2
0
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0