PyGTK DrawingArea类

PyGTK DrawingArea类

DrawingArea小组件展示了一个包含gtk.gdk.Window的空白画布,在上面可以绘制直线、矩形、圆弧等对象。

PyGTK使用Cairo库进行这样的绘制操作。Cairo是一个流行的2D矢量图形库。它是用C语言编写的,尽管它与大多数语言如C++、JavaPython、PHP等都有绑定关系。Cairo库可以用来在各种操作系统的标准输出设备上绘图。它还可以用来创建PDF、SVG和post-script文件。

为了执行不同的绘图操作,我们必须获取目标输出对象的设备上的文本。在这种情况下,由于绘图是出现在gtk.DrawingArea小部件上的,所以要获取它里面包含的gdk.Window的设备上下文。这个类有一个 cairo-create() 方法来返回设备上下文。

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

DrawingArea小组件可以根据它发出的以下信号连接到回调:

Realize 当小组件被实例化在一个特定的显示器上时,要采取任何必要的行动。
configure_event 当小组件改变大小时采取任何必要的行动。
expose_event 处理当绘图区第一次出现在屏幕上时,或者当它被另一个窗口覆盖后又被揭开(暴露)时,重新绘制小组件的内容。

鼠标和键盘事件也可以通过 gtk.Widget类add_events()方法 来调用回调

特别有趣的是expose-event信号,它在DrawingArea画布第一次出现的时候被发出。在Cairo库中定义的绘制2D对象的不同方法,都是通过这个与expose-event信号相连的回调来调用的。这些方法在Cairo设备上下文中绘制相应的对象。

以下是可用的绘图方法

  • dc.rectangle(x,y,w,h) – 在指定的左上角坐标处绘制一个矩形,并给出宽度和高度。

  • dc.arc(x,y,r,a1,a2) – 绘制一个具有给定半径和两个角度的圆弧。

  • dc.line(x1, y1, x2, y2) – 在两对坐标之间画一条直线。

  • dc.line_to(x,y) – 从当前位置到(x,y)画一条线。

  • dc.show_text(str) – 在当前光标位置画出字符串。

  • dc.stroke() – 绘制轮廓线。

  • dc.fill() – 用当前颜色填充形状

  • dc.set_color_rgb(r,g,b) – 设置轮廓和填充的颜色,r、g和b值在0.0到1.0之间。

例子

下面的脚本使用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() 

上述脚本将产生以下输出 –

PyGTK - DrawingArea类

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程