Вставьте флажок в панде dataframe - PullRequest
1 голос
/ 14 января 2020

Я хочу отобразить pandas dataframe, в котором в начале каждой строки есть Checkbox (ipywidget), чтобы узнать, какую строку выбирает пользователь.

Я провел пробную попытку с Button, используя следующий код

import pandas as pd
from IPython.display import display, HTML
from ipywidgets import Button, HBox, VBox,widgets
import ipywidgets
from ipyleaflet import Map

mS2 = Map(center=(40.4, -3.7), zoom=6)

offlineS2 = ['true', 'false']
nameS2 = ['a','b']

df = pd.DataFrame({'Name': nameS2,'Offile': offlineS2})

# ideally I would need Checkbox not Button
button0 = widgets.Button(description='Click to display')
button1 = widgets.Button()         
button2 = widgets.Button(description='Select')
dfW = ipywidgets.HTML(df.style.set_table_attributes('class="table"').render())

testup = HBox([VBox([button0,button1,button2]),dfW])
display(VBox([testup,mS2]))

Вывод выглядит так: enter image description here

Однако, когда я изменяю код widgets.Button на widgets.Checkbox, хотя он отображается, расстояние между флажком и кадром данных слишком велико. Почему это происходит?

enter image description here

РЕДАКТИРОВАТЬ

Использование

`button1 = widgets.Button(indent=False)`

enter image description here

1 Ответ

1 голос
/ 14 января 2020

По умолчанию: indent имеет значение True. Измените его на False и Voilà.

Попробуйте:

button0 = widgets.Checkbox(
    description="Click to display", 
    value=True,
    indent=False
)
button1 = widgets.Checkbox(
    description="", 
    value=True,
    indent=False
)
button2 = widgets.Checkbox(
    description="Select", 
    value=True,
    indent=False
)

Редактировать:

Попробуйте вручную установить поля и отступы для своего HBox.

verticalItems = VBox([button0,button1,button2], layout=Layout(margin='0 0 0 0', padding='0 0 0 0'))
fullLayout = HBox([verticalItems, dfW], layout=Layout(margin='0 0 0 0', padding='0 0 0 0'))

display(VBox([fullLayout ,mS2]))
...