Closed
Description
Environment data
- debugpy version: 1.8.2
- OS and version: OpenSUSE Tumbleweed (20240716), KDE Plasma 6 under wayland.
- Python version (& distribution if applicable, e.g. Anaconda): python 3.11.9 from conda-forge (mamba)
- Using VS Code or Visual Studio:
VS Code with Python Debugger v2024.8.0
Actual behavior
Try debugging the following code:
import matplotlib.pyplot as plt
plt.plot([1,2,3,3])
plt.show()
pass
If the break point is at pass
, where Debugger skipped entering the interactive mode, the figure is shown normally.
But if there are break points earlier, e.g., add a break point at plt.plot...
, then debug and go though until we stop at pass
,
the figure won't be shown, with a wayland icon/window showing in the taskbar, but an invisible figure window.
Turing on interactive mode manually makes the plot invisible too (set break point at pass
and debug):
import matplotlib.pyplot as plt
plt.ion()
plt.plot([1,2,3,3])
plt.show()
pass
Expected behavior
We expect the interactive plot window be shown as a normal window and response to resize/maximize etc.
Steps to reproduce:
- Create an environment with matplotlib=3.9:
mamba create -n 'test' matplotlib=3.9 qt-wayland
- Enabling wayland support via setting
QT_QPA_PLATFORM=wayland;xcb
in/etc/environment
orlaunch.json
- launch VS code and try debugging the previous code snippets
- You may see the behavior described earlier, with visible figure window when interactive mode is off, or misbehavior when interactive mode is on.
Additional information:
- If we down-grade matplotlib to 3.8, this issue do not exist. (see Can't create plot from the debug console #1606)
- Might be the same issue as Failed test due to matplotlib deprecation of interactive_bk #1623, don't know if is related to Unable to interactively see matplotlib plots with
QtAgg
backend #858 et al., - Don't know if this is wayland specific, or also affect X11 (not tested). But note that under wayland, there exists a warning:
qt.qpa.wayland: Wayland does not support QWindow::requestActivate()
whenplt.show()
.