css 如何将ipython HTML widget显示为按钮

mm9b1k5b  于 2023-03-24  发布在  Python
关注(0)|答案(1)|浏览(101)

我正在使用Python在Jupyter notebook中工作。在我的代码中,我正在执行一些操作来创建pandas DataFrame,显示它,最后将其保存为csv文件。我现在试图允许用户通过单击在显示表后创建的按钮来下载它。在笔记本中,它通过使用下载来工作()从hublib.ui包,但一旦我移动到瞧,按钮什么也不做。在这一点上,我改变了,我使用的HTML部件从ipywidgets。它是工作,但它被视为一个可点击的文本。我想知道是否有办法让它显示为按钮而不是纯文本。
下面是负责下载的部分代码:

self.csv_file = self.df.to_csv("table.csv",index=False)
htmlWidget = widgets.HTML(value="")
self.create_download_link("table.csv", htmlWidget)
display(htmlWidget)

def create_download_link(self, filename, htmlWidget):  
        title="Click here to download the table in csv format"
        
        data = open(filename, "rb").read()
        b64 = base64.b64encode(data)
        payload = b64.decode()
        
        html = '<a download="{filename}" href="data:text/csv;base64,{payload}" target="_blank">{title}</a>'
        htmlWidget.value = html.format(payload=payload,title=title,filename=filename)

谢谢你的帮助。

8yparm6h

8yparm6h1#

只需在<a></a>中添加一个HTML按钮

def create_download_link(self, filename, htmlWidget):  
    title="Click here to download the table in csv format"

    data = open(filename, "rb").read()
    b64 = base64.b64encode(data)
    payload = b64.decode()

    html = '''
    <a download="{filename}" href="data:text/csv;base64,{payload}" target="_blank">
    <button>{title}</button>
    </a>'
    '''
    htmlWidget.value = html.format(payload=payload,title=title,filename=filename)

结果:

相关问题