Files
wehub-resource-sync adf0d17497
publish / version_or_publish (push) Has been cancelled
storybook-build / changes (push) Has been cancelled
storybook-build / :storybook-build (push) Has been cancelled
Sync Gradio Skills to Hugging Face / sync-skills (push) Has been cancelled
functional / changes (push) Has been cancelled
functional / build-frontend (push) Has been cancelled
functional / functional-test-SSR=false (push) Has been cancelled
functional / functional-reload (push) Has been cancelled
js / changes (push) Has been cancelled
js / js-test (push) Has been cancelled
docs-build / changes (push) Has been cancelled
docs-build / docs-build (push) Has been cancelled
docs-build / website-build (push) Has been cancelled
functional / functional-test-SSR=true (push) Has been cancelled
hygiene / hygiene-test (push) Has been cancelled
python / changes (push) Has been cancelled
python / build (push) Has been cancelled
python / test-ubuntu-latest-flaky (push) Has been cancelled
python / test-ubuntu-latest-not-flaky (push) Has been cancelled
python / test-windows-latest-flaky (push) Has been cancelled
python / test-windows-latest-not-flaky (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 13:17:32 +08:00

263 lines
9.0 KiB
Python

import gradio as gr
headers = ["Short", "Medium Column", "Long Description", "Also Long"]
short_row = ["id-1", "alpha", "small cell", "small cell"]
long_row = [
"id-2",
"Lorem ipsum dolor sit amet, consectetur adipiscing elit.",
(
"This is a deliberately very long cell value intended to exceed any "
"reasonable column width so we can see truncation and wrapping behavior "
"kick in. It keeps going and going and going so that the column must "
"either truncate with an ellipsis or wrap across multiple lines."
),
"The quick brown fox jumps over the lazy dog several times in a row.",
]
unbreakable_row = [
"id-3",
"ok",
"Supercalifragilisticexpialidocious" * 4,
"word " * 30,
]
data = [
short_row,
long_row,
unbreakable_row,
short_row,
long_row,
unbreakable_row,
short_row,
long_row,
unbreakable_row,
]
with gr.Blocks(title="Dataframe widths & wrapping") as demo:
gr.Markdown(
"""
# Dataframe column widths and wrapping
Demonstrates how `wrap` and `column_widths` interact. In every case the
column's max width is capped at 100% of the dataframe's viewport so a
single cell can never be wider than the scroll area.
"""
)
with gr.Row():
with gr.Tab("Defaults (no wrap, auto widths)"):
gr.Markdown(
"No `wrap`, no `column_widths`. Columns size to the longest cell; "
"anything longer than the viewport truncates with an ellipsis."
)
gr.Dataframe(value=data, headers=headers)
with gr.Tab("wrap=True, auto widths"):
gr.Markdown(
"`wrap=True` and no `column_widths`. Columns still size to the "
"longest cell, but content that would exceed the viewport wraps "
"onto multiple lines instead of truncating."
)
gr.Dataframe(value=data, headers=headers, wrap=True)
with gr.Tab("Fixed pixel widths"):
gr.Markdown(
"`column_widths=['80px', '160px', '240px', '200px']`. Pixel widths "
"are honored exactly; long content truncates."
)
gr.Dataframe(
value=data,
headers=headers,
column_widths=["80px", "160px", "240px", "200px"],
)
with gr.Tab("Fixed pixel widths + wrap"):
gr.Markdown(
"Same fixed widths but `wrap=True`. Long content wraps within the "
"fixed column instead of truncating."
)
gr.Dataframe(
value=data,
headers=headers,
column_widths=["80px", "160px", "240px", "200px"],
wrap=True,
)
with gr.Tab("Percentage widths"):
gr.Markdown(
"`column_widths=['10%', '25%', '40%', '25%']`. Percentages resolve "
"against the dataframe's viewport width, so they re-flow when you "
"resize the window."
)
gr.Dataframe(
value=data,
headers=headers,
column_widths=["10%", "25%", "40%", "25%"],
)
with gr.Tab("Percentage widths + wrap"):
gr.Markdown("Same percentages, but with `wrap=True`.")
gr.Dataframe(
value=data,
headers=headers,
column_widths=["10%", "25%", "40%", "25%"],
wrap=True,
)
with gr.Tab("Mixed widths (px / % / int)"):
gr.Markdown(
"`column_widths=[120, '20%', 'auto', '30%']`. Integers are treated "
"as pixels; `'auto'` falls back to content-based sizing (capped at "
"the viewport)."
)
gr.Dataframe(
value=data,
headers=headers,
column_widths=[120, "20%", "auto", "30%"],
)
with gr.Tab("max_chars with wide data"):
gr.Markdown(
"`max_chars=20` truncates cell text to 20 characters with an "
"ellipsis. The column is sized to the rendered (truncated) text "
"rather than the full underlying value, so there's no wasted "
"horizontal space."
)
gr.Dataframe(
value=data,
headers=headers,
max_chars=20,
)
with gr.Tab("max_chars + fixed widths + wrap"):
gr.Markdown(
"`max_chars=15`, explicit pixel widths, and `wrap=True`. Text is "
"first truncated by character count, then wrapped to fit the "
"column."
)
gr.Dataframe(
value=data,
headers=headers,
max_chars=15,
column_widths=["80px", "160px", "200px", "200px"],
wrap=True,
)
with gr.Row():
with gr.Tab("Defaults (no wrap, auto widths)"):
gr.Markdown(
"No `wrap`, no `column_widths`. Columns size to the longest cell; "
"anything longer than the viewport truncates with an ellipsis."
)
gr.Dataframe(
value=data,
headers=headers,
interactive=True,
)
with gr.Tab("wrap=True, auto widths"):
gr.Markdown(
"`wrap=True` and no `column_widths`. Columns still size to the "
"longest cell, but content that would exceed the viewport wraps "
"onto multiple lines instead of truncating."
)
gr.Dataframe(
value=data,
headers=headers,
wrap=True,
interactive=True,
)
with gr.Tab("Fixed pixel widths"):
gr.Markdown(
"`column_widths=['80px', '160px', '240px', '200px']`. Pixel widths "
"are honored exactly; long content truncates."
)
gr.Dataframe(
interactive=True,
value=data,
headers=headers,
column_widths=["80px", "160px", "240px", "200px"],
)
with gr.Tab("Fixed pixel widths + wrap"):
gr.Markdown(
"Same fixed widths but `wrap=True`. Long content wraps within the "
"fixed column instead of truncating."
)
gr.Dataframe(
interactive=True,
value=data,
headers=headers,
column_widths=["80px", "160px", "240px", "200px"],
wrap=True,
)
with gr.Tab("Percentage widths"):
gr.Markdown(
"`column_widths=['10%', '25%', '40%', '25%']`. Percentages resolve "
"against the dataframe's viewport width, so they re-flow when you "
"resize the window."
)
gr.Dataframe(
interactive=True,
value=data,
headers=headers,
column_widths=["10%", "25%", "40%", "25%"],
)
with gr.Tab("Percentage widths + wrap"):
gr.Markdown("Same percentages, but with `wrap=True`.")
gr.Dataframe(
value=data,
interactive=True,
headers=headers,
column_widths=["10%", "25%", "40%", "25%"],
wrap=True,
)
with gr.Tab("Mixed widths (px / % / int)"):
gr.Markdown(
"`column_widths=[120, '20%', 'auto', '30%']`. Integers are treated "
"as pixels; `'auto'` falls back to content-based sizing (capped at "
"the viewport)."
)
gr.Dataframe(
value=data,
interactive=True,
headers=headers,
column_widths=[120, "20%", "auto", "30%"],
)
with gr.Tab("max_chars with wide data"):
gr.Markdown(
"`max_chars=20` truncates cell text to 20 characters with an "
"ellipsis. The column is sized to the rendered (truncated) text "
"rather than the full underlying value, so there's no wasted "
"horizontal space."
)
gr.Dataframe(
interactive=True,
value=data,
headers=headers,
max_chars=20,
)
with gr.Tab("max_chars + fixed widths + wrap"):
gr.Markdown(
"`max_chars=15`, explicit pixel widths, and `wrap=True`. Text is "
"first truncated by character count, then wrapped to fit the "
"column."
)
gr.Dataframe(
interactive=True,
value=data,
headers=headers,
max_chars=15,
column_widths=["80px", "160px", "200px", "200px"],
wrap=True,
)
if __name__ == "__main__":
demo.launch()