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()

绘图区小部件可以基于它发出的以下信号连接到回调函数−

Realize 在特定显示器上实例化小部件时,采取任何必要的操作。
configure_event 当小部件改变大小时,采取任何必要的操作。
expose_event 在绘图区域首次显示在屏幕上时,或者当它被另一个窗口覆盖然后显示(暴露)时,处理小部件内容的重绘。

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

特别有趣的是,在第一次出现绘图区域画布时,会触发expose-event信号。在与expose-event信号连接的回调函数中,调用了Cairo库中定义的绘制2D对象的不同方法。这些方法在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教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程