PyQt5 QWebEngineView 小部件堆叠绘图而不是清除旧绘图并添加新绘图

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

我正在用 python 为我的模拟模块创建一个接口。我正在使用 pyqt5 作为界面。在模拟中,我用 plotly 制作了一个 3D 交互式绘图,然后我使用 QWebEngineView 将其显示在我的界面上。在逻辑文件中我的方法代码下方显示情节:

Method to display the 3D plot in my interface

#Method to display the 3D plot in the openGLWidget_3Dplot widget
def display_3D_plot(self, fig):
    #Create a temporary HTML file to save the plotly figure
    html = fig.to_html(full_html=False, include_plotlyjs='cdn')
    with open('temp.html', 'w') as f:
        f.truncate(0)  # clear the file before writing to it
        f.write(html)

    #Remove any existing QWebEngineView from the layout

    # create a QWebEngineView and set its size to match the openGLWidget_3Dplot
    view = QWebEngineView()
    view.setFixedSize(self.openGLWidget_3Dplot.size())

    #Load the HTML file into the QWebEngineView 
    #NOTE: since QUrl.fromLocalFile() returns a path using the wrong separator "\", 
    #so we must replace the wrong separators with the correct ones, i.e. "/".
    view.setUrl(QUrl.fromLocalFile(os.path.abspath('temp.html').replace('\\', '/')))

    layout = QtWidgets.QVBoxLayout(self.openGLWidget_3Dplot)
    self.openGLWidget_3Dplot.setLayout(layout)
    layout.addWidget(view)

    #Add QWebEngineView to the layout of the openGLWidget_3Dplot
    self.openGLWidget_3Dplot.layout().addWidget(view)

** 在这种情况下,“无花果”是用 plotly 创建的 3D 图。

这里的问题是,每次我运行模拟时,都会在同一个小部件中显示一个新图,而之前的图也存在。它们垂直堆叠在一起。一旦我再次运行模拟,我希望旧图消失,以便新图可以正确显示。那么我怎样才能确定在添加新图之前旧图被删除了呢?

我尝试了很多不同的东西,但都没有用,向 chatGPT 寻求帮助,但也无济于事。

Plots stacking on one another once a new plot is made

我尝试清除 HTML 文件(如代码中所示),为小部件创建容器并将其删除,使用 setHTML(""),从布局中删除 QWebEngineView,以及来自 chatGPT 的以下代码行:

# clear the contents of the openGLWidget_3Dplot
self.openGLWidget_3Dplot.makeCurrent()
gl.glClear(gl.GL_COLOR_BUFFER_BIT | gl.GL_DEPTH_BUFFER_BIT)
self.openGLWidget_3Dplot.doneCurrent()

我还尝试了其他较小的更改,但目前都没有用。

有什么建议或意见吗?

opengl interface pyqt5 plotly qwebengineview
© www.soinside.com 2019 - 2024. All rights reserved.