如何处理ipywidgets中按钮的可变宽度

how to deal with variable width of Buttons in ipywidgets

我需要显示一堆按钮。 每个按钮的描述对应文本的每个单词。

为了给一个文本外观,我想使按钮宽度符合里面单词的长度。 所以我创建了一个变量,根据字母的数量给出宽度 px。

我不知道为什么,但效果不佳。它适用于某些单词,但不适用于其他单词。

一些想法? (在屏幕截图中看到单词 "the" 没有足够的 space 并且只有 ... 显示。

最终目标当然是让文本看起来像我可以点击单词的文本一样正常。

谢谢。

mylist=['loren','ipsum','whapmmtever','loren','ipsum','otra','the','palabra','concept']

list_btns=[]
for i,word in enumerate(mylist):
    # here I try to define the width of the button as depending on the length of the word:
    wordwidth= str(len(word)*12) + 'px'
    wd_raw_save_button = widgets.Button(description=word,
                                        disabled=False,
                                        button_style='success',
                                        tooltip='check the word',
                                        icon='',
                                        layout = Layout(width = wordwidth, margin='0px 0px 0px 0px'))

    list_btns.append(wd_raw_save_button)



showcase=HBox(list_btns)
showcase

实际上 运行 瞧瞧我得到的结果:

这不会给人以真实文本的印象,即单词之间的相同间距是最终目标。 我猜,但我不确定,原因可能是字符的宽度不同,我将不得不逐个字符地计算宽度。但这并不能解释 "the" 这个词不适合按钮。 第二种解释是,潜在的 CSS 假设了一个特定的最小边界,该边界 "over" 单词本身。无论如何,我不知道如何 control/influence 它。

CSS 对小部件的控制有限。似乎有一个大约 40px 的截止点,文本将被截断。我使用了一个简单的 max 比较来希望接近您正在寻找的内容:

from ipywidgets import *
mylist=['loren','ipsum','whapmmtever','loren','ipsum','otra','the','palabra','concept', 'a'] * 2

list_btns=[]
for i,word in enumerate(mylist):
    # here I try to define the width of the button as depending on the length of the word:
    wordwidth= max(len(word) * 12, 40)
    wordwidth = str(wordwidth) + 'px'
    wd_raw_save_button = widgets.Button(description=word,
                                        disabled=False,
                                        button_style='success',
                                        tooltip='check the word',
                                        icon='',
                                        layout = Layout(width = wordwidth, margin='0px 0px 0px 0px')
                                       )

    list_btns.append(wd_raw_save_button)



showcase=HBox(list_btns, layout= Layout(width='100%'))
showcase