Pygtk-drawingarea-class

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

PyGTK-DrawingAreaクラス

DrawingAreaウィジェットは、線、長方形、円弧などのオブジェクトが置かれるgtk.gdk.Windowを含む空白のキャンバスを表示します。 描くことができます。

PyGTKは、このような描画操作にCairoライブラリを使用します。 カイロは、人気のある2Dベクトルグラフィックライブラリです。 Cで書かれていますが、C ++、Java、Python、PHPなどのほとんどの言語でバインディングがあります。 Cairoライブラリを使用して、さまざまなオペレーティングシステムの標準出力デバイスに描画できます。 また、PDF、SVG、およびポストスクリプトファイルの作成にも使用できます。

異なる描画操作を実行するには、ターゲット出力オブジェクトのテキストでデバイスを取得する必要があります。 この場合、図面はgtk.DrawingAreaウィジェットに表示されるため、その中に含まれるgdk.Windowのデバイスコンテキストが取得されます。 このクラスには、デバイスコンテキストを返す* cairo-create()*メソッドがあります。

area = gtk.DrawingArea()
dc = area.window.cairo_create()

DrawingAreaウィジェットは、それによって発行される次の信号に基づいてコールバックに接続できます-

Realize To take any necessary actions when the widget is instantiated on a particular display.
configure_event To take any necessary actions when the widget changes size.
expose_event To handle redrawing the contents of the widget when a drawing area first comes on screen, or when it’s covered by another window and then uncovered (exposed).

マウスイベントとキーボードイベントは、* gtk.Widgetクラス*の* add_events()メソッド*によってコールバックを呼び出すためにも使用できます。

特に興味深いのは、DrawingAreaキャンバスが最初に起動したときに発行される露出イベント信号です。 Cairoライブラリで定義されている2Dオブジェクトを描画するためのさまざまなメソッドは、expose-eventシグナルに接続されたこのコールバックから呼び出されます。 これらのメソッドは、Cairoデバイスコンテキストに対応するオブジェクトを描画します。

以下は、利用可能な描画方法です-

  • dc.rectangle(x、y、w、h)-これは、指定された左上の座標で、幅と高さがgivwnの長方形を描画します。
  • dc.arc(x、y、r、a1、a2)-これは、指定された半径と2つの角度で円弧を描きます。
  • dc.line(x1、y1、x2、y2)-これは、2つの座標ペアの間に線を引きます。
  • dc.line_to(x、y)-これは現在の位置から(x、y)まで線を引きます
  • dc.show_text(str)-現在のカーソル位置に文字列を描画します
  • dc.stroke()-アウトラインを描画
  • dc.fill()-形状を現在の色で塗りつぶします
  • dc.set_color_rgb(r、g、b)-アウトラインの色を設定し、0.0〜1.0のr、g、b値で塗りつぶします

次のスクリプトは、さまざまな形状を描画し、Cairoメソッドを使用してテストします。

import gtk
import math

class PyApp(gtk.Window):

   def __init__(self):
      super(PyApp, self).__init__()

      self.set_title("Basic shapes using Cairo")
      self.set_size_request(400, 250)
      self.set_position(gtk.WIN_POS_CENTER)

      self.connect("destroy", gtk.main_quit)

      darea = gtk.DrawingArea()
      darea.connect("expose-event", self.expose)

      self.add(darea)
      self.show_all()

      def expose(self, widget, event):
      cr = widget.window.cairo_create()

      cr.set_line_width(2)
      cr.set_source_rgb(0,0,1)
      cr.rectangle(10,10,100,100)
      cr.stroke()

      cr.set_source_rgb(1,0,0)
      cr.rectangle(10,125,100,100)
      cr.stroke()

      cr.set_source_rgb(0,1,0)
      cr.rectangle(125,10,100,100)
      cr.fill()

      cr.set_source_rgb(0.5,0.6,0.7)
      cr.rectangle(125,125,100,100)
      cr.fill()

      cr.arc(300, 50, 50,0, 2*math.pi)
      cr.set_source_rgb(0.2,0.2,0.2)
      cr.fill()

      cr.arc(300, 200, 50, math.pi,0)
      cr.set_source_rgb(0.1,0.1,0.1)
      cr.stroke()

      cr.move_to(50,240)
      cr.show_text("Hello PyGTK")
      cr.move_to(150,240)
      cr.line_to(400,240)
      cr.stroke()

PyApp()
gtk.main()

上記のスクリプトは、次の出力を生成します-

基本形状カイロ