- PyGTK 教程
- PyGTK - 首页
- PyGTK - 简介
- PyGTK - 环境配置
- PyGTK - Hello World
- PyGTK - 重要类
- PyGTK - Window 类
- PyGTK - Button 类
- PyGTK - Label 类
- PyGTK - Entry 类
- PyGTK - 信号处理
- PyGTK - 事件处理
- PyGTK - 容器
- PyGTK - Box 类
- PyGTK - ButtonBox 类
- PyGTK - Alignment 类
- PyGTK - EventBox 类
- PyGTK - Layout 类
- PyGTK - ComboBox 类
- PyGTK - ToggleButton 类
- PyGTK - CheckButton 类
- PyGTK - RadioButton 类
- PyGTK - MenuBar、Menu 和 MenuItem
- PyGTK - Toolbar 类
- PyGTK - Adjustment 类
- PyGTK - Range 类
- PyGTK - Scale 类
- PyGTK - Scrollbar 类
- PyGTK - Dialog 类
- PyGTK - MessageDialog 类
- PyGTK - AboutDialog 类
- PyGTK - 字体选择对话框
- PyGTK - 颜色选择对话框
- PyGTK - 文件选择对话框
- PyGTK - Notebook 类
- PyGTK - Frame 类
- PyGTK - AspectFrame 类
- PyGTK - TreeView 类
- PyGTK - Paned 类
- PyGTK - Statusbar 类
- PyGTK - ProgressBar 类
- PyGTK - Viewport 类
- PyGTK - Scrolledwindow 类
- PyGTK - Arrow 类
- PyGTK - Image 类
- PyGTK - DrawingArea 类
- PyGTK - SpinButton 类
- PyGTK - Calendar 类
- PyGTK - Clipboard 类
- PyGTK - Ruler 类
- PyGTK - 超时机制
- PyGTK - 拖放操作
- PyGTK 有用资源
- PyGTK - 快速指南
- PyGTK - 有用资源
- PyGTK - 讨论
PyGTK - DrawingArea 类
DrawingArea 小部件呈现一个空白画布,其中包含一个 gtk.gdk.Window,可以在其上绘制线条、矩形、弧线等对象。
PyGTK 使用 Cairo 库进行此类绘图操作。Cairo 是一个流行的二维矢量图形库。它是用 C 语言编写的,尽管它在大多数语言(如 C++、Java、Python、PHP 等)中都有绑定。Cairo 库可用于在各种操作系统的标准输出设备上绘图。它还可以用于创建 PDF、SVG 和 PostScript 文件。
为了执行不同的绘图操作,我们必须获取目标输出对象的设备上下文。在本例中,由于绘图出现在 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 画布第一次出现时发出。从连接到 expose-event 信号的回调中调用在 Cairo 库中定义的不同二维对象绘图方法。这些方法在 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()
上面的脚本将生成以下输出: