2013年6月28日金曜日

PyQtの勉強をしてみる。 その4 matplotlibを表示

今回はQtにmatplotlibを組み込む。
描画がインタラクティブな場合は前にやったようにPyQwtを使う必要があるけど、そうじゃない場合は使い慣れたmatplotlibがやっぱりいい。

参考URLはここ
なんかやりたいことがもう完成しとるけど、導入部分だけをシンプルに構成してみる。

MainWindowの中にBarPlotWidgetというのを使ってそこをmatplotlibの描画領域にする。
とりあえずはMainWindowはBarplotWidgetのみを配置することにする。

FigureCanvasQTAggをWidgetのようにaddWidget()すればレイアウトに追加できるようだ。 この辺は調べるの面倒やけ天下り的にやろう。
import sys

import numpy as np
from PyQt4.QtGui import *
from PyQt4.QtCore import *

from matplotlib.backends.backend_qt4agg import FigureCanvasQTAgg as FigureCanvas
from matplotlib.figure import Figure


class BarPlot():
    def __init__(self, parent=None):
        
        # Create the mpl Figure and FigCanvas objects.
        # 5x4 inches, 100 dots-per-inch
        self.dpi = 100
        self.fig = Figure((5,4), dpi=self.dpi)
        self.canvas = FigureCanvas(self.fig)    #pass a figure to the canvas
        self.canvas.setParent(parent)
        
        self.axes = self.fig.add_subplot(111)
        
        self.data = [1,2,3,1,2,3]


    def on_draw(self):
        """
        redraw the figure
        """
        self.axes.clear()
        self.axes.grid()

        x = range(len(self.data))
        self.axes.bar(left=x, height=self.data, width=0.3, align='center',
                      alpha=0.44, picker=5)

        self.canvas.draw()
    


class AppForm(QMainWindow):
    def __init__(self, parent=None):
        QMainWindow.__init__(self, parent)

        self.creat_main_window()
        self.barplot.on_draw()

    def creat_main_window(self):
        self.main_frame = QWidget()
        self.barplot = BarPlot(self.main_frame)

        #set layout
        vbox = QVBoxLayout()
        vbox.addWidget(self.barplot.canvas)    #add canvs to the layout

        self.main_frame.setLayout(vbox)

        #set widget
        self.setCentralWidget(self.main_frame)
        
def main(args):
    app = QApplication(args)
    form = AppForm()
    form.show()
    sys.exit(app.exec_())

if __name__ == "__main__":
    main(sys.argv)

0 件のコメント:

コメントを投稿