我正在尝试将matplotlib(版本3.0.0)嵌入pyqt5 gui(版本5.9.2)中。因此,我正在创建一个画布并将其添加到布局中。但是,当我开始更改canvas.setFixedSize(500,500)
之类的大小属性,然后通过拖动窗口角来更改gui大小时,我得到一个黑色边框:。
可以通过添加fig.patch.set_facecolor('#ffffff')
来解决此问题。但是,我想知道是否会出现这种现象,或者是否存在另一种防止黑色边框出现的方法?
import sys
from PyQt5.QtWidgets import (QWidget, QGridLayout,QPushButton, QApplication, QSizePolicy)
from matplotlib.backends.qt_compat import QtCore, QtWidgets, is_pyqt5
if is_pyqt5():
from matplotlib.backends.backend_qt5agg import (
FigureCanvas, NavigationToolbar2QT as NavigationToolbar)
else:
from matplotlib.backends.backend_qt4agg import (
FigureCanvas, NavigationToolbar2QT as NavigationToolbar)
from matplotlib.figure import Figure
import matplotlib.pyplot as plt
class ApplicationWindow(QtWidgets.QMainWindow):
def __init__(self):
super().__init__()
self._main = QtWidgets.QWidget()
self.setCentralWidget(self._main)
layout = QGridLayout(self._main)
fig, ax = plt.subplots(1,1)
canvas = FigureCanvas(fig)
# enabling one of following options leads to black frame
#canvas.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed)
#canvas.setFixedSize(500,500)
#which can be fixed by
#fig.patch.set_facecolor('#ffffff')
layout.addWidget(canvas)
if __name__ == "__main__":
# Check whether there is already a running QApplication (e.g., if running
# from an IDE).
qapp = QtWidgets.QApplication.instance()
if not qapp:
qapp = QtWidgets.QApplication(sys.argv)
app = ApplicationWindow()
app.show()
qapp.exec_()
描述的问题仅在Jupyter中调用时发生。使用%matplotlib agg
从内联切换到agg后端可以解决此问题。