2016-04-23 24 views
1

MatplotlibアニメーションをPyQT4 GUIに埋め込むアプリケーションを作成したいと思います。私は、FigureCanvasQTAggオブジェクトがどのように機能するかの基礎を理解しようとしており、作成後の軸の制限を変更するのに問題があります。以下のプログラムでは、FigureCanvasQTAggオブジェクトを使用して非常に単純な図が生成されます。ボタンを押すと、結果のプロットのx軸の制限が変更されます。 (次のコードは、this postの末尾にコードの簡易版であることに注意してください。)PyQT4内のMatplotlibの図形軸を変更する

import sys 
from PyQt4 import QtGui 
from matplotlib.backends.backend_qt4agg import FigureCanvasQTAgg as FigureCanvas 
from matplotlib.figure import Figure 

class Window(QtGui.QDialog): 

def __init__(self): 
    super(Window, self).__init__() 
    self.fig = Figure() 
    self.canvas = FigureCanvas(self.fig) 
    self.ax = self.fig.add_subplot(111) # create an axis 
    self.ax.hold(False) # discards the old graph 
    self.ax.set_xlim([0, 100]) 
    self.ax.set_ylim([-10, 10]) 
    self.ax.set_xlabel('Random x label') 
    self.button = QtGui.QPushButton('Adjust axes') 
    self.button.clicked.connect(self.axis_adjust) 

    # set the layout 
    layout = QtGui.QVBoxLayout() 
    layout.addWidget(self.canvas) 
    layout.addWidget(self.button) 
    self.setLayout(layout) 
    self.canvas.draw() 

def axis_adjust(self): 
    self.ax.set_xlim([0, 200]) 
    self.ax.set_xlabel('New label') 


app = QtGui.QApplication(sys.argv) 
ex = Window() 
sys.exit(app.exec_()) 

を残念ながら、私は私のプログラムを実行して、「軸の調整」ボタンをクリックしたとき、それは絶対に効果がありません。私が根本的に理解していないことの1つは、self.canvas.draw()という行が何であるかです。 a Matplotlib tutorialから、私はこの数字が実際にGUIウィンドウ内に現れるという印象を受けました...しかし、これは当てはまりません。self.canvas.draw()という行をコメントアウトすると、FigureはGUIウィンドウ内に表示されます。実際には、FigureをGUIウィンドウに表示させる行self.setLayout(layout)です。これは私が読んだものから意味をなさないものです。この機能の理解が私の不足は私の問題の根本にあるようです...

答えて

1

私は以前に簡単なアプリケーションを書いていました。私の経験では、self.canvas.draw()は、設定を更新した後、またはmatplotlibの機能を使ってカーブ(または他のオブジェクト)をプロットした後で呼び出さなければなりません。これは、単にグラフィカルオブジェクトの更新をトリガーする関数です。したがって、self.canvas.draw()をコールバック関数の末尾に追加すると、axis_adjust()は問題を解決するはずです。 >QtGui.QVBoxLayout - - >FigureCanvas - それをやった>matplotlib.figure.Figure

+0

-

FYI、あなたのUIの階層がQtGui.QDialogになりありがとうございました! – dyson

関連する問題