2017-04-18 16 views
1

グラフを描画する別のスクリプトに関数があるので、グラフは既にプリロードされているので、私はPyQt5で自分のインタフェースのウィジェットに配置したいだけです。私はそれをインポートし、それが実行されると、2つのウィンドウが開きます.1つはグラフがあり、もう1つはユーザーインターフェイスがあります。ここでMatplotlibグラフをUIに埋め込む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() 

これは、1つのスクリプトです。私の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 * 

をそして、私のウィンドウクラスの開始時に、セットアップ機能の前に、私はこの機能を持っている:

def minionGraphSetup(self, recentMinionRatioAvg): 
    minionRatioGraph(recentMinionRatioAvg) 

答えて

0

代わりのplt.showを呼び出す必要にインポートしたスクリプトによって生成されたFigureをPyQt GUIのFigureCanvasに配置します。あなたのプロットスクリプトでそう

は、キャンバスにそれを置くために得た数値を使用して、あなたのGUIスクリプトで

def minionRatioGraph(recentMinionRatioAvg): 
    ... 
    fig = plt.gcf() 
    fig.gca().add_artist(centre_circle) 
    plt.axis('equal') 
    #plt.show() <- don't show window! 
    return fig 

を行います。

def minionGraphSetup(self, recentMinionRatioAvg): 
    fig = minionRatioGraph(recentMinionRatioAvg) 
    ... 
    self.canvas = FigureCanvas(fig, ...) 


あなたがイメージを返すようにしたい場合は、バイトバッファに保存し

import io 
def minionRatioGraph(recentMinionRatioAvg): 
    ... 
    fig = plt.gcf() 
    fig.gca().add_artist(centre_circle) 
    plt.axis('equal') 
    buff = io.BytesIO() 
    plt.savefig(buff, format="png") 
    return buff 

、その後、PyQtはGUIで画像として表示することができます。 (私は以下のテストをしていないので少し違うかもしれません)

def minionGraphSetup(self, recentMinionRatioAvg): 
    image = minionRatioGraph(recentMinionRatioAvg) 
    label = QLabel() 
    pixmap = QPixmap(image) 
    label.setPixmap(pixmap) 
+0

これは動作しますが、これは私が探していたものではなく、あなたのせいです。私はおそらくguiにちょうどイメージとしてグラフをエクスポートすることができたか知っていますか?グラフを画像として保存できるのは分かっていますが、私が知っている限り、更新された画像を画面に表示する方法はありますか?リソースファイルをコンパイルするときは、すべての画像が同じままです。それをリロードする方法。 –

+0

画像の回答が更新されました。私は現在それをテストすることはできませんので、作業コードよりもロードマップとしてそれを多く取ってください。 – ImportanceOfBeingErnest

+0

コードは 'pixmap = QPixmap(image)'で動作しなくなりました。なぜか分かりません。何かご意見は?また、どのように私はそれを私の窓に置くのだろうか?私は窓の名前を渡して、self.centralwidgetをQLabelカッコに入れますか?ありがとう –

関連する問題