我有一个django网站,它将显示各种matplotlib图。我能够创建一个matplotlib图,将其转换为png并显示它,...但仅当所有逻辑都包含在相关应用程序的views.py文件中时。
如果我只需要一个带有简单情节的相当基本的页面,那就没问题了。然而问题是整个网站需要几个涉及他们自己的python文件,逻辑等的图。
所以我所做的是在app中创建一个新文件夹,其中包含用于计算各种图的python文件。从view.py中我计划只调用相关的python文件,它将返回图。通过这样做,我可以保持关于如何创建绘图与页面显示分开的逻辑。
我遇到的问题是以下错误
QPixmap: It is not safe to use pixmaps outside the GUI thread
在研究此错误后,当您尝试从其他线程更新GUI时,这显然是个问题。然而,这不是我想要做的。我试图在views.py文件之外创建绘图,然后将其传回并创建png以更新页面。那么GUI的更新不应该发生在另一个线程中吗?
我在views.py中的代码是:
fig = plotLogic.getPlot() #this is a call to a separate file which returns the figure
canvas=FigureCanvas(fig)
response=django.http.HttpResponse(content_type='image/png')
canvas.print_png(response)
return response
有没有其他方法可以完成我想要做的事情?基本上只是保持绘图如何创建的逻辑分离并返回绘图,以便它可以转换为png并显示。
我觉得我在某种程度上使它变得比它应该更复杂。我不是故意尝试做任何想要在单独的线程中更新GUI的事情。 非常感谢。