hoffstadt / hoffstadt/DearPyGui
Show/hide doesn't work on the legend in dpg.subplots
- Dominant language
- C++
- Stars
- 15.6k
- Forks
- 783
- PR merge metrics
- No merged PRs in 30d
Description
## 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
```python
#!/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()
```
Contributor guide
Assessment
This issue has not been assessed yet.