From e8649b9f1c5a92a770a1632ffd6cb1e5f7238d74 Mon Sep 17 00:00:00 2001 From: Christian Kento Rasmussen <christian.kento@gmail.com> Date: Wed, 8 Jan 2025 09:23:49 +0100 Subject: [PATCH] Add uniform image generation for Gradio plots to prevent flickering --- qim3d/gui/data_explorer.py | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/qim3d/gui/data_explorer.py b/qim3d/gui/data_explorer.py index ecabeb81..f8f77385 100644 --- a/qim3d/gui/data_explorer.py +++ b/qim3d/gui/data_explorer.py @@ -163,17 +163,31 @@ class Interface(BaseInterface): # Visualization and results with gr.Row(): + def create_uniform_image(intensity=1): + """ + Generates a blank image with a single color. + Gradio `gr.Plot` components will flicker if there is no default value. + bug fix on gradio version 4.44.0 + """ + pixels = np.zeros((100, 100, 3), dtype=np.uint8) + int(intensity * 255) + fig, ax = plt.subplots(figsize=(10, 10)) + ax.imshow(pixels, interpolation="nearest") + + # Adjustments + ax.axis("off") + fig.subplots_adjust(left=0, right=1, bottom=0, top=1) + return fig # Z Slicer with gr.Column(visible=False) as result_z_slicer: - zslice_plot = gr.Plot(label="Z slice") + zslice_plot = gr.Plot(label="Z slice", value=create_uniform_image(1)) zpos = gr.Slider( minimum=0, maximum=1, value=0.5, step=0.01, label="Z position" ) # Y Slicer with gr.Column(visible=False) as result_y_slicer: - yslice_plot = gr.Plot(label="Y slice") + yslice_plot = gr.Plot(label="Y slice", value=create_uniform_image(1)) ypos = gr.Slider( minimum=0, maximum=1, value=0.5, step=0.01, label="Y position" @@ -181,7 +195,7 @@ class Interface(BaseInterface): # X Slicer with gr.Column(visible=False) as result_x_slicer: - xslice_plot = gr.Plot(label="X slice") + xslice_plot = gr.Plot(label="X slice", value=create_uniform_image(1)) xpos = gr.Slider( minimum=0, maximum=1, value=0.5, step=0.01, label="X position" @@ -439,6 +453,7 @@ class Interface(BaseInterface): def update_slice_wrapper(self, letter): def update_slice(position_slider:float, cmap:str): + print('update slice') """ position_slider: float from gradio slider, saying which relative slice we want to see cmap: string gradio drop down menu, saying what cmap we want to use for display -- GitLab