1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91
|
# (C) Copyright 2005-2023 Enthought, Inc., Austin, TX
# All rights reserved.
#
# This software is provided without warranty under the terms of the BSD
# license included in LICENSE.txt and may be redistributed only under
# the conditions described in the aforementioned license. The license
# is also available online at http://www.enthought.com/licenses/BSD.txt
#
# Thanks for using Enthought open source!
""" Example showing DataView for ArrayDataModel. """
import logging
import numpy as np
from traits.api import Array, Instance, observe
from pyface.api import ApplicationWindow, GUI
from pyface.data_view.api import (
DataViewWidget, IDataViewWidget, table_format, csv_format, npy_format
)
from pyface.data_view.data_models.api import ArrayDataModel
from pyface.data_view.exporters.api import RowExporter
from pyface.data_view.value_types.api import FloatValue
from pyface.drop_handler import FileDropHandler
logger = logging.getLogger(__name__)
class MainWindow(ApplicationWindow):
""" The main application window. """
data = Array()
data_view = Instance(IDataViewWidget)
def load_data(self, path):
try:
self.data = np.load(path)
except Exception:
logger.exception()
def _create_contents(self, parent):
self.data_view.create(parent)
return self.data_view.control
def destroy(self):
self.data_view.destroy()
super().destroy()
@observe('data')
def _data_updated(self, event):
if self.data_view is not None:
self.data_view.data_model.data = self.data
def _data_default(self):
return np.random.uniform(size=(10000, 10, 10)) * 1000000
def _data_view_default(self):
return DataViewWidget(
data_model=ArrayDataModel(
data=self.data,
value_type=FloatValue(),
),
selection_mode='extended',
exporters=[
RowExporter(format=table_format),
RowExporter(format=csv_format),
RowExporter(format=npy_format),
],
drop_handlers=[
FileDropHandler(extensions=['.npy'], open_file=self.load_data),
],
)
# Application entry point.
if __name__ == "__main__":
logging.basicConfig(level=logging.INFO)
# Create the GUI (this does NOT start the GUI event loop).
gui = GUI()
# Create and open the main window.
window = MainWindow()
window.open()
# Start the GUI event loop!
gui.start_event_loop()
|