在pyqt中更改大小时,FigureCanvas上的黑色边框

问题描述 投票:0回答:1

我正在尝试将matplotlib(版本3.0.0)嵌入pyqt5 gui(版本5.9.2)中。因此,我正在创建一个画布并将其添加到布局中。但是,当我开始更改canvas.setFixedSize(500,500)之类的大小属性,然后通过拖动窗口角来更改gui大小时,我得到一个黑色边框:black border

可以通过添加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_()
python matplotlib pyqt
1个回答
0
投票

描述的问题仅在Jupyter中调用时发生。使用%matplotlib agg从内联切换到agg后端可以解决此问题。

© www.soinside.com 2019 - 2024. All rights reserved.