[英]Matplotlib Embed a graph in to a UI PyQt5
我在另一個繪制圖形的腳本中有一個函數,因此圖形已經預先繪制,我只想將它放在PyQt5中我的界面上的一個小部件中。 我已導入它,當它運行時,它會打開兩個窗口,一個帶有圖形,一個帶有用戶界面。任何想法?
這是代碼:
def minionRatioGraph(recentMinionRatioAvg):
x = recentMinionRatioAvg
a = x*10
b = 100-a
sizes = [a, b]
colors = ['#0047ab', 'lightcoral']
plt.pie(sizes, colors=colors)
#determine score colour as scolour
if x < 5:
scolour = "#ff6961" #red
elif 5 <= x < 5.5:
scolour = "#ffb347" #orange
elif 5.5 <= x < 6.5:
scolour = "#77dd77" #light green
elif 6.5 <= x:
scolour = "#03c03c" # dark green
#draw a circle at the center of pie to make it look like a donut
centre_circle = plt.Circle((0,0),0.75, fc=scolour,linewidth=1.25)
fig = plt.gcf()
fig.gca().add_artist(centre_circle)
# Set aspect ratio to be equal so that pie is drawn as a circle.
plt.axis('equal')
plt.show()
這是一個腳本。 在我的GUI腳本中,我導入了以下內容:
from PyQt5 import QtCore, QtGui, QtWidgets
import sqlite3
import matplotlib.pyplot as plt
from matplotlib.figure import Figure
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as
FigureCanvas
from graphSetup import *
在我的窗口類的開頭,在setup函數之前,我有這個函數:
def minionGraphSetup(self, recentMinionRatioAvg):
minionRatioGraph(recentMinionRatioAvg)
您不需要調用plt.show
而是需要將導入腳本生成的圖形放入PyQt GUI的FigureCanvas中。
所以在你的繪圖腳本中做
def minionRatioGraph(recentMinionRatioAvg):
...
fig = plt.gcf()
fig.gca().add_artist(centre_circle)
plt.axis('equal')
#plt.show() <- don't show window!
return fig
在GUI腳本中,使用獲得的圖形將其放入畫布中。
def minionGraphSetup(self, recentMinionRatioAvg):
fig = minionRatioGraph(recentMinionRatioAvg)
...
self.canvas = FigureCanvas(fig, ...)
def minionGraphSetup(self, recentMinionRatioAvg):
image = minionRatioGraph(recentMinionRatioAvg)
label = QLabel()
pixmap = QPixmap(image)
label.setPixmap(pixmap)
然后在PyQt GUI中將其顯示為圖像。 (我沒有測試下面的內容,所以它可能會有所不同。)
def minionGraphSetup(self, recentMinionRatioAvg): image = minionRatioGraph(recentMinionRatioAvg) label = QLabel() pixmap = QPixmap(image) label.setPixmap(pixmap)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.