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
相关产品推荐
相关产品推荐

