You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用带标签页的Matplotlib绘图窗口时出现QGuiApplication::font()崩溃问题

问题:Matplotlib多标签页窗口重复创建导致Python崩溃

我使用一个便捷类在同一Matplotlib窗口中绘制多个带标签页的图表,首次使用效果正常,但第二次创建窗口后Python会崩溃,报错信息为:
QGuiApplication::font(): no QGuiApplication instance and no application font set

最小复现代码如下:

from plotWindow import plotWindow
import matplotlib.pyplot as plt
import numpy as np

for n in range(3):
    pw = plotWindow()
    x = np.arange(0, 10, 0.001)
    for i in range(1,3):
        f = plt.figure()
        ysin = np.sin(i*x)
        plt.plot(x, ysin, '--')
        pw.addPlot(str(i), f)
    pw.show()

我对PyQt5了解甚少,不知道该从何处着手排查问题,恳请帮助!

附:该便捷类的完整代码:

import matplotlib
matplotlib.use('qt5agg')

from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas
from matplotlib.backends.backend_qt5agg import NavigationToolbar2QT as NavigationToolbar
import matplotlib.pyplot as plt
import numpy as np
from PyQt5.QtWidgets import QMainWindow, QApplication, QPushButton, QWidget, QAction, QTabWidget,QVBoxLayout
from PyQt5.QtGui import QIcon
from PyQt5.QtCore import pyqtSlot
import sys


class plotWindow():
    def __init__(self, parent=None):
        self.app = QApplication(sys.argv)
        self.MainWindow = QMainWindow()
        self.MainWindow.__init__()
        self.MainWindow.setWindowTitle("plot window")
        self.canvases = []
        self.figure_handles = []
        self.toolbar_handles = []
        self.tab_handles = []
        self.current_window = -1
        self.tabs = QTabWidget()
        self.MainWindow.setCentralWidget(self.tabs)
        self.MainWindow.resize(1280, 900)
        self.MainWindow.show()

    def addPlot(self, title, figure):
        new_tab = QWidget()
        layout = QVBoxLayout()
        new_tab.setLayout(layout)

        figure.subplots_adjust(left=0.05, right=0.99, bottom=0.05, top=0.91, wspace=0.2, hspace=0.2)
        new_canvas = FigureCanvas(figure)
        new_toolbar = NavigationToolbar(new_canvas, new_tab)

        layout.addWidget(new_canvas)
        layout.addWidget(new_toolbar)
        self.tabs.addTab(new_tab, title)

        self.toolbar_handles.append(new_toolbar)
        self.canvases.append(new_canvas)
        self.figure_handles.append(figure)
        self.tab_handles.append(new_tab)

    def show(self):
        self.app.exec_()

该问题已在相关代码仓库上报但尚未得到解答。

内容的提问来源于stack exchange,提问作者David Pagnon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 04:20:58