You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Bokeh中Paragraph组件无法插入换行符的问题求助

解决Bokeh Paragraph组件无法插入换行的问题

我之前也碰到过这个一模一样的问题!Bokeh的Paragraph组件默认处理文本的方式确实有点坑,直接加\n或者<br>都不生效,这里给你两种可行的解决办法:

方法一:用Div组件替代Paragraph(推荐,支持HTML格式)

Paragraph是纯文本组件,不支持HTML解析,而Div组件专门用来渲染HTML内容,用它来做输出控制台最合适。只需要把你的Paragraph换成Div,然后用<br>来换行就行:

from bokeh.io import curdoc
from bokeh.models.widgets import Div, Button
from bokeh.layouts import row, widgetbox

notifications = Div(text='initial text')
button = Button(label="Click me to add text")

def callback():
    notifications.text += '<br>more text'

button.on_click(callback)

box = widgetbox(notifications, button)
curdoc().add_root(row(box))

这样每次点击按钮,新内容就会自动换行了,而且你还能顺便用HTML标签做一些格式美化,比如加粗、变色之类的,比Paragraph灵活多了。

方法二:修改Paragraph的CSS样式让\n生效

如果你一定要用Paragraph组件,那可以通过设置它的style属性,强制让浏览器保留换行符的格式。只需要给Paragraph加上white-space: pre-wrap的样式,这样\n就会被解析成换行了:

from bokeh.io import curdoc
from bokeh.models.widgets import Paragraph, Button
from bokeh.layouts import row, widgetbox

# 添加style属性,设置white-space为pre-wrap
notifications = Paragraph(text='initial text', style={'white-space': 'pre-wrap'})
button = Button(label="Click me to add text")

def callback():
    notifications.text += '\nmore text'

button.on_click(callback)

box = widgetbox(notifications, button)
curdoc().add_root(row(box))

这个方法的原理是:浏览器默认会把纯文本里的换行符当成空格处理(对应CSS的white-space: normal),而pre-wrap会让浏览器保留换行符,同时还能自动换行过长的文本,不会出现横向滚动条。

为什么原来的方法无效?

  • 直接加\n没用:因为Paragraph默认的CSS样式会忽略换行符,把多个空白字符(包括换行)合并成一个空格。
  • 加<br>没用:因为Paragraph是纯文本组件,不会解析HTML标签,只会把<br>当成普通文本显示出来。

内容的提问来源于stack exchange,提问作者dnh37

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:04:42