wxPython DrawLineで簡単なグラフを表示してみる

2011/01/27

wxPythonでグラフィックを取り扱うのは自分の実力では敷居が高そうだがやってみる。初心者はおきまりの超簡単なものから出発するのが鉄則。いつものごとくメモしておく。

グラフィックを描くにあたり参考にしたリンク

実験環境

  • Ubuntu 10.04
  • Python 2.6.5
  • wxPython 2.8.10.1

ウィンドウに青色の方眼紙を表示してから、赤色で直線を描いてみる。

#!/usr/bin/env python
#coding:utf-8

import wx

class MyWindow(wx.Frame):
    def __init__(self, parent=None, id=-1, title=None):
        wx.Frame.__init__(self, parent, id, title)
        self.panel = wx.Panel(self, size=(300, 200))
        self.panel.SetBackgroundColour('WHITE')
        self.panel.Bind(wx.EVT_PAINT, self.OnPaint)
        self.Fit()

    def OnPaint(self, event):
        dc = wx.PaintDC(self.panel)
        dc.SetPen(wx.Pen('blue'))
        for i in range(9):
            y = 20 + 20*i
            dc.DrawLine(50, y, 250, y)
        for i in range(11):
            x = 50 + 20*i
            dc.DrawLine(x, 20, x, 180)
        dc.SetPen(wx.Pen('red'))
        dc.DrawLine(50, 180, 250, 20)

if __name__ == '__main__':
    app = wx.PySimpleApp()
    w = MyWindow(title='wxgr-line')
    w.Center()
    w.Show()
    app.MainLoop()

メモ

  • フレームの中にパネル(panel)を準備する。そのパネル上にグラフを表示させる。
  • グラフはwx.EVT_PAINTイベントが発生したタイミングで描画される。バインドしたOnPaintメソッドが描画部分となる。
  • グラフ描画について
    • wx.PaintDCはクライアント部分(タイトルとボーダーを除いた部分)に描画するデバイスコンテキスト。wx.PaintEvent からのみ利用できる。
    • 生成したデバイスコンテキストオブジェクトにペンを設定してからラインを描画する。

実行すると

wxPython

Posted by skw