diff --git a/README.rst b/README.rst index f1d8850df16..5f74f05d6ce 100644 --- a/README.rst +++ b/README.rst @@ -96,7 +96,7 @@ For full functionality, some functions require: - Picard >= 0.3 - CuPy >= 4.0 (for NVIDIA CUDA acceleration) - DIPY >= 0.10.1 -- PyVista >= 0.23.1 +- PyVista >= 0.24 Contributing to MNE-Python ^^^^^^^^^^^^^^^^^^^^^^^^^^ diff --git a/doc/conf.py b/doc/conf.py index f93d836fc9b..797f1d74fc9 100644 --- a/doc/conf.py +++ b/doc/conf.py @@ -369,38 +369,8 @@ except Exception: pass else: - # XXX hack, adapted from PyVista to work around - # https://github.com/mne-tools/mne-python/issues/7228 - # https://github.com/pyvista/pyvista/pull/548 - import shutil - - class Scraper(object): # noqa:D101 - - def __repr__(self): # noqa:D101 - return 'PyVista Scraper' - - def __call__(self, block, block_vars, gallery_conf): # noqa:D101 - from sphinx_gallery.scrapers import figure_rst - image_names = list() - image_path_iterator = block_vars["image_path_iterator"] - figures = pyvista.plotting._ALL_PLOTTERS - seen_plotters = list() - for address, plotter in figures.items(): - if plotter in seen_plotters: - continue - seen_plotters += [plotter] - fname = next(image_path_iterator) - if hasattr(plotter, '_gif_filename'): - # move gif to fname - shutil.move(plotter._gif_filename, fname) - else: - plotter.screenshot(fname) - image_names.append(fname) - pyvista.close_all() # close and clear all plotters - return figure_rst(image_names, gallery_conf["src_dir"]) - scrapers += (Scraper(),) # eventually just ('pyvista',) -if any(x in scrapers for x in ('pyvista', 'mayavi')) or \ - any('PyVista' in repr(s) for s in scrapers): # just for our hack + scrapers += ('pyvista',) +if any(x in scrapers for x in ('pyvista', 'mayavi')): from traits.api import push_exception_handler push_exception_handler(reraise_exceptions=True) report_scraper = mne.report._ReportScraper() diff --git a/environment.yml b/environment.yml index 2663395ad93..737bea936c6 100644 --- a/environment.yml +++ b/environment.yml @@ -33,7 +33,7 @@ dependencies: - pip: - mne - https://api.github.com/repos/numpy/numpydoc/zipball/master - - pyvista>=0.23.1 + - pyvista>=0.24 - mayavi - PySurfer[save_movie] - dipy --only-binary dipy diff --git a/mne/viz/_brain/_timeviewer.py b/mne/viz/_brain/_timeviewer.py index 342a0a760b3..fbb7076aaeb 100644 --- a/mne/viz/_brain/_timeviewer.py +++ b/mne/viz/_brain/_timeviewer.py @@ -14,10 +14,14 @@ class MplCanvas(object): """Ultimately, this is a QWidget (as well as a FigureCanvasAgg, etc.).""" - def __init__(self, timeviewer, parent, width, height, dpi): + def __init__(self, timeviewer, width, height, dpi): from PyQt5 import QtWidgets from matplotlib.figure import Figure from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg + if timeviewer.separate_canvas: + parent = None + else: + parent = timeviewer.window self.fig = Figure(figsize=(width, height), dpi=dpi) self.canvas = FigureCanvasQTAgg(self.fig) self.axes = self.fig.add_subplot(111) @@ -316,7 +320,9 @@ def __init__(self, brain, show_traces=False): self.brain.time_viewer = self self.plotter = brain._renderer.plotter self.main_menu = self.plotter.main_menu - self.interactor = self.plotter + self.window = self.plotter.app_window + self.status_bar = self.window.statusBar() + self.interactor = self.plotter.interactor self.interactor.keyPressEvent = self.keyPressEvent # Derived parameters: @@ -402,7 +408,7 @@ def play(self): self.time_call(idx, update_widget=True) if time_point == max_time: self.playback = False - self.plotter.update() # critical for smooth animation + self.plotter.update() # critical for smooth animation def set_slider_style(self, slider, show_label=True): if slider is not None: @@ -615,11 +621,7 @@ def configure_point_picking(self): dpi = win.windowHandle().screen().logicalDotsPerInch() w, h = win.geometry().width() / dpi, win.geometry().height() / dpi h /= 3 # one third of the window - if self.separate_canvas: - parent = None - else: - parent = win - self.mpl_canvas = MplCanvas(self, parent, w, h, dpi) + self.mpl_canvas = MplCanvas(self, w, h, dpi) xlim = [np.min(self.brain._data['time']), np.max(self.brain._data['time'])] self.mpl_canvas.axes.set(xlim=xlim) diff --git a/requirements.txt b/requirements.txt index 9e1d0308764..27eab79351b 100644 --- a/requirements.txt +++ b/requirements.txt @@ -30,4 +30,4 @@ xlrd pydocstyle flake8 https://api.github.com/repos/mcmtroffaes/sphinxcontrib-bibtex/zipball/29694f215b39d64a31b845aafd9ff2ae9329494f -pyvista>=0.23.1 +pyvista>=0.24