Show/hide doesn't work on the legend in dpg.subplots
v-ein opened this issue · 0 comments
Version of Dear PyGui
Version: 1.11.2
Operating System: Windows 10
My Issue/Question
dpg.show_item()
and dpg.hide_item()
can dynamically show and hide the legend on a regular plot, but do not work on the legend within dpg.subplots
(the one belonging to dpg.subplots
itself).
This is caused by static_cast
in DearPyGui::set_configuration
for mvPlotLegendConfig
. I bet it was supposed to be dynamic_cast
. Currently, the if
can't ever enter the mvSubPlots
branch.
Moreover, if plot_legend
is added directly to dpg.stage
, that static_cast
will lead to memory corruption as the code tries to modify bytes beyond the mvStage
object. I couldn't get it crash but it's pure luck.
To Reproduce
Steps to reproduce the behavior:
Call dpg.show_item()
or dpg.hide_item()
on a plot_legend
within dpg.subplots
, and see if it works. Alternatively, run the below example and click the show/hide buttons.
Expected behavior
Show/hide should work for both plot legend and subplots legend.
Screenshots/Video
None.
Standalone, minimal, complete and verifiable example
#!/usr/local/bin/python3
from math import sin
import dearpygui.dearpygui as dpg
dpg.create_context()
dpg.create_viewport(title="Test", width=500, height=750)
with dpg.window() as wnd:
dpg.set_primary_window(dpg.last_item(), True)
x_data = [x/10 for x in range(0, 200)]
y_data = [sin(x) for x in x_data]
with dpg.group(horizontal=True):
dpg.add_button(label="Show subplots legend", callback=lambda: dpg.show_item("subplots-legend"))
dpg.add_button(label="Hide subplots legend", callback=lambda: dpg.hide_item("subplots-legend"))
with dpg.subplots(2, 2, label="Subplots", width=-1, height=300):
dpg.add_plot_legend(tag="subplots-legend")
for i in range(4):
with dpg.plot(no_title=True):
dpg.add_plot_axis(dpg.mvXAxis, label="", no_tick_labels=True)
with dpg.plot_axis(dpg.mvYAxis, label="", no_tick_labels=True):
dpg.add_line_series(x_data, y_data, label=f"Series {i}")
dpg.add_spacer(height=20)
with dpg.group(horizontal=True):
dpg.add_button(label="Show plot legend", callback=lambda: dpg.show_item("plot-legend"))
dpg.add_button(label="Hide plot legend", callback=lambda: dpg.hide_item("plot-legend"))
with dpg.plot(label="Regular plot", width=-1, height=-1):
dpg.add_plot_legend(tag="plot-legend")
x_axis = dpg.add_plot_axis(dpg.mvXAxis, label="x")
with dpg.plot_axis(dpg.mvYAxis, label="y") as y_axis:
dpg.add_line_series(x_data, y_data, label="Line series")
dpg.setup_dearpygui()
dpg.show_viewport()
dpg.start_dearpygui()
dpg.destroy_context()