gpt4 book ai didi

Python onclick 按钮小部件返回对象

转载 作者:行者123 更新时间:2023-12-01 21:58:31 24 4
gpt4 key购买 nike

我正在尝试使用 python 在 jupyter notebooks 中构建文件/数据选择器。我的想法是,我使用 multipleSelect 小部件选择文件中的一些文件和数据通道,然后使用一个按钮返回一个数据帧。

如何访问 df_object?

#stack example
from ipywidgets import widgets
from IPython.display import display
from IPython.display import clear_output
import pandas as pd
import numpy as np
filenames = ["file1", "file2"]
file_dict = {
"file1":pd.DataFrame(np.arange(5)),
"file2":pd.DataFrame(np.arange(10,15))
}

def data_selection():
sel_file = widgets.SelectMultiple(description="Files",
options=filenames)
display(sel_file)

button = widgets.Button(description="OK")
display(button)

def on_button_clicked(button):
clear_output(wait=True) #clears the previous output
display(sel_file) #displays new selection window
display(button) #displays new button
for f in sel_file.value:
print (f)
display (file_dict[f])
#global df_object #would be a solution but not recommended for sure
df_object = file_dict[f]
return df_object #doesn't work
button.on_click(on_button_clicked)

data_selection()

最佳答案

你真的应该为此使用一个类,然后将你的所有函数定义为作用于该类的一个实例。并非所有这些都需要公开访问。您还可以将 df_objects 存储在单独的属性(如字典)中,并使用单独的函数访问字典。查看下面的代码:

class foo(object):

def __init__(self, file1, file2):
self.filenames = [file1, file2]
self.file_dict = {
file1:pd.DataFrame(np.arange(5)),
file2:pd.DataFrame(np.arange(10,15))
}

def _create_widgets(self):
self.sel_file = widgets.SelectMultiple(description='Files',
options=self.filenames,
value=[self.filenames[0]],
)
self.button = widgets.Button(description="OK")
self.button.on_click(self._on_button_clicked)

def _on_button_clicked(self, change):
self.out.clear_output()
self.df_objects = {}
with self.out:
for f in self.sel_file.value:
print(f)
display(self.file_dict[f])
self.df_objects[f] = self.file_dict[f]

def display_widgets(self):
self._create_widgets()
self.out = widgets.Output() # this is the output widget in which the df is displayed
display(widgets.VBox(
[
self.sel_file,
self.button,
self.out
]
)
)

def get_df_objects(self):
return self.df_objects

然后您可以像这样创建实例并显示小部件:

something = foo('a', 'b')
something.display_widgets()

something.get_df_objects() 将返回一个包含所需“file:dataframe_of_file”键值对的字典。

希望这有帮助:)

关于Python onclick 按钮小部件返回对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54813069/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com