2025, Nov 15 11:00
Fix pyqtgraph Blank Plot in PySide6: Avoid 6.9.1 (PYSIDE-3115), Use 6.9.0/6.8.3 or PyQt
Seeing a blank pyqtgraph plot with PySide6? It's a known 6.9.1 rendering bug (PYSIDE-3115). Fix it by downgrading to 6.9.0/6.8.3 or switching to PyQt.
When a simple pyqtgraph plot in a PySide6 window renders as a blank canvas without any error messages, it looks like a logic bug in the code. In reality, the issue may be caused by a specific binding version that breaks drawing. Below is a minimal example that demonstrates the scenario and how to resolve it correctly.
Reproducible example
from PySide6.QtWidgets import QApplication, QMainWindow
import pyqtgraph as pg
import sys
class AppFrame(QMainWindow):
def __init__(self):
super().__init__()
self.plot_area = pg.PlotWidget()
self.setCentralWidget(self.plot_area)
t_hours = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
temps = [30, 32, 34, 32, 33, 31, 29, 32, 35, 45]
self.plot_area.plot(t_hours, temps)
app_ctx = QApplication(sys.argv)
window = AppFrame()
window.show()
app_ctx.exec()
What’s actually going on
The blank UI is not caused by the plotting code. It is a known issue in PySide 6.9.1, tracked as PYSIDE-3115. The bug affects rendering in a way that shows no visible output and does not emit warnings or errors, which makes it confusing during debugging. The problem is significant enough that the PySide 6.9.1 release has been blacklisted by pyqtgraph, and the fix is marked for PySide 6.9.2 and the future 6.10 branch.
Given this, running the example with Python 3.13.5, pyqtgraph 0.13.7, and PySide6 6.9.1 can result in an empty plot window while the exact same code works with other combinations, including PyQt6 or earlier PySide6 versions.
How to fix the blank plot
The simplest path is to avoid PySide 6.9.1. Downgrade to PySide 6.9.0 or use the 6.8 branch, for example 6.8.3, which does not include the change that introduced the regression. Another viable option is to switch to PyQt, which does not appear to be affected. When the fixed PySide 6.9.2 becomes available, upgrading will restore expected behavior.
In short: avoid PySide 6.9.1; use 6.9.0 or 6.8.3, or switch to PyQt temporarily. The same code then renders correctly.
Working code under a non-affected environment
The plotting logic itself does not require changes. Once you use a non-affected version, the following snippet displays the line chart as intended:
from PySide6.QtWidgets import QApplication, QMainWindow
import pyqtgraph as pg
import sys
class AppFrame(QMainWindow):
def __init__(self):
super().__init__()
self.plot_area = pg.PlotWidget()
self.setCentralWidget(self.plot_area)
t_hours = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
temps = [30, 32, 34, 32, 33, 31, 29, 32, 35, 45]
self.plot_area.plot(t_hours, temps)
app_ctx = QApplication(sys.argv)
window = AppFrame()
window.show()
app_ctx.exec()
Why this matters
Bindings like PySide sit between your Python code and Qt. A regression at that layer can produce blank output without any runtime noise, wasting time on application-level debugging when the root cause is in the toolkit. For teams shipping desktop apps, this is a good example of why dependency pinning, change tracking, and awareness of upstream blacklists or regressions are essential for stability.
Conclusion
If your pyqtgraph plot renders as a blank UI under PySide6, check the binding version first. PySide 6.9.1 is affected by a known bug, already blacklisted by pyqtgraph and set to be fixed in 6.9.2 and later. Downgrade to 6.9.0 or 6.8.3, or switch to PyQt until the fix lands. Keep versions pinned, watch release notes, and validate GUI behavior whenever you move across minor releases of GUI bindings.