Wxpython-drawing-api

提供:Dev Guides
移動先:案内検索

wxPython-描画API

*GDI* + (Graphics Drawing Interface)、 *CoreGraphics* 、および* Cairoライブラリ*は、wxPythonの描画APIのフレームワークを形成します。 wx.GraphicsContextは主要な描画可能オブジェクトであり、これを使用してさまざまなデバイスコンテキストオブジェクトが作成されます。

wx.DCは抽象クラスです。 その派生クラスは、さまざまなデバイスでグラフィックとテキストをレンダリングするために使用されます。 デバイスコンテキストクラスは-

  • wx.ScreenDC -これを使用して、個々のウィンドウではなく、画面にペイントします。
  • wx.ClientDC -これを使用してウィンドウのクライアント領域(境界線やその他の装飾のない部分)にペイントしますが、wxPaintEvent内からは使用しないでください。
  • wx.PaintDC -これを使用して、ウィンドウのクライアント領域にペイントしますが、wxPaintEvent内からのみです。
  • wx.WindowDC -これを使用して、装飾を含むウィンドウの領域全体にペイントします。 これは、Windows以外のプラットフォームでは利用できない場合があります。

wxPythonの描画APIは、形状、テキスト、画像を描画するためのさまざまな機能を提供します。 色、ペン、ブラシ、フォントなど、描画に必要なオブジェクトもGDIクラスを使用して構築できます。

wx.Colourクラス

Colorオブジェクトは、RGB(赤、緑、青)の強度値の組み合わせを表し、それぞれ0〜255のスケールです。 いくつかの定義済みの色オブジェクトがあります-

  • wxBLACK
  • wxBLUE
  • wxCYAN
  • wxGREEN
  • wxYELLOW
  • wxLIGHT_GREY
  • wxRED
  • wxWHITE

RGB値のカスタムの組み合わせを持つ色は、* wx.Colourオブジェクト*として形成されます。

wx.Colour(r,g,b)

wx.Penクラス

ペンオブジェクトは、線、長方形、円などのグラフィックスの形状の色、幅、スタイルを決定します。

  • 事前定義されたペンオブジェクト*は-
wxBLACK_DASHED_PEN wxBLACK_PEN wxBLUE_PEN wxCYAN_PEN wxGREEN_PEN wxYELLOW_PEN wxGREY_PEN wxLIGHT_GREY_PEN wxMEDIUM_GREY_PEN wxRED_PEN wxTRANSPARENT_PEN wxWHITE_PEN
  • 事前定義されたペンスタイル*は-
wx.SOLID wx.DOT wx.LONG_DASH wx.SHORT_DASH wx.DOT_DASH wx.TRANSPARENT

wx.Brushクラス

ブラシは、長方形、楕円、円などの形状の背景を塗りつぶすために必要な別の基本的なグラフィックスオブジェクトです。

カスタムBrushオブジェクトには、wx.ColourおよびBrushスタイルパラメーターが必要です。 以下は、事前定義されたブラシスタイルのリストです-

wx.SOLID wx.STIPPLE wx.BDIAGONAL_HATCH wx.CROSSDIAG_HATCH wx.FDIAGONAL_HATCH wx.CROSS_HATCH wx.HORIZONTAL_HATCH wx.VERTICAL_HATCH wx.TRANSPARENT

wxPythonには、さまざまな形状、テキスト、画像の描画を容易にする多数の機能があります。

S.N. Functions & Description
1

DrawRectangle()

指定された寸法の長方形を描画します

2

DrawCircle()

中心と半径として指定された点に円を描きます

3

DrawEllipse()

指定されたx半径とy半径で楕円を描画します

4

DrawLine()

2つのwx.Pointオブジェクトの間に線を描画します

5

DrawBitmap()

指定された位置に画像を描画します

6

DrawText()

指定したテキストを指定した位置に表示します

上記の関数は、Pen、Brush、Color、およびFontオブジェクトを使用して、次の例で実装されます。

完全なコードは次のとおりです-

import wx

class Mywin(wx.Frame):

   def __init__(self, parent, title):
      super(Mywin, self).__init__(parent, title = title,size = (500,300))
      self.InitUI()

   def InitUI(self):
      self.Bind(wx.EVT_PAINT, self.OnPaint)
      self.Centre()
      self.Show(True)

   def OnPaint(self, e):
      dc = wx.PaintDC(self)
      brush = wx.Brush("white")
      dc.SetBackground(brush)
      dc.Clear()

      dc.DrawBitmap(wx.Bitmap("python.jpg"),10,10,True)
      color = wx.Colour(255,0,0)
      b = wx.Brush(color)

      dc.SetBrush(b)
      dc.DrawCircle(300,125,50)
      dc.SetBrush(wx.Brush(wx.Colour(255,255,255)))
      dc.DrawCircle(300,125,30)

      font = wx.Font(18, wx.ROMAN, wx.ITALIC, wx.NORMAL)
      dc.SetFont(font)
      dc.DrawText("Hello wxPython",200,10)

      pen = wx.Pen(wx.Colour(0,0,255))
      dc.SetPen(pen)
      dc.DrawLine(200,50,350,50)
      dc.SetBrush(wx.Brush(wx.Colour(0,255,0), wx.CROSS_HATCH))
      dc.DrawRectangle(380, 15, 90, 60)

ex = wx.App()
Mywin(None,'Drawing demo')
ex.MainLoop()

上記のコードは、次の出力を生成します-

描画デモ