hoffstadt / hoffstadt/DearPyGui

Show/hide doesn't work on the legend in dpg.subplots

Open
#2,318 0 comments 0 reactions 0 assignees View on GitHub
state: pending type: bug
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

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.