Вы действительно должны использовать класс для этого, а затем определить все свои функции как действующие на экземпляр этого класса.Не все из них должны быть общедоступными.Вы также можете сохранить 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
'пары ключ-значение.
Надеюсь, это поможет:)