Home
Categories
WIKI
Topic
User
LANGUAGE:
中文
English
Cairo 图形指南 for Python (3) —— Cairo 后端
社区开发
2399
views ·
0
replies ·
To
floor
Go
lovesnow
deepin
2011-12-08 12:43
Author
Cairo 支持多种后端,Cairo 支持多种后端,本文基于几个示例讲述如何使用 Cairo 各种后端创建 PNG 图像、PDF 文件与 SVG 文件以及如何使用 Cairo 在 GTK 窗口中绘图。
1. PNG 图像第一个示例 (example-1.c) 用于生成 PNG 图像。
import cairo
surface = cairo.ImageSurface(cairo.FORMAT_ARGB32, 320, 48)
cr = cairo.Context(surface)
cr.set_source_rgb(0.627, 0, 0)
cr.select_font_face('Monospace', cairo.FONT_SLANT_NORMAL, cairo.FONT_WEIGHT_NORMAL)
cr.set_font_size(24.0)
cr.move_to(10.0, 34.0)
cr.show_text("最好的用的Linux-linux deepin")
surface.write_to_png('image.png')
Copy the Code
效果图:
image.png_001.png
这个示例是一个很小的控制台程序,运行后可生成一份 PNG 图像文件。
2. PDF 文件在第二个示例 (example-2.c) 中,将使用 Cairo 生成一份 PDF 文件,其内容与第一个示例所生成的图像是相同的。
import cairo
surface = cairo.PDFSurface("pdffile.pdf", 320, 48)
cr = cairo.Context(surface)
cr.set_source_rgb(0.627, 0 ,0)
cr.select_font_face('Monospace', cairo.FONT_SLANT_ITALIC, cairo.FONT_WEIGHT_BOLD)
cr.set_font_size(24.0)
cr.move_to(10.0, 34.0)
cr.show_text("深度Linux,值得深入")
cr.show_page()
Copy the Code
3. SVG 文件第三个示例演示如何使用 Cairo SVG 后端生成一份简单的 SVG (Scalble Vector Graphics) 文件。SVG 技术近几年很热门。
import cairo
surface = cairo.SVGSurface('svgfile.svg', 320, 48)
cr = cairo.Context(surface)
cr.set_source_rgb(0.627, 0, 0)
cr.select_font_face('Monospace', cairo.FONT_SLANT_ITALIC,
cairo.FONT_WEIGHT_BOLD)
cr.set_font_size(24.0)
cr.move_to(10.0, 34.0)
cr.show_text("深度Linux,值得您深入!")
Copy the Code
4. 在最后这个示例中,演示如何在 GTK 窗口中使用 Cairo 绘制图形。基于 GTK 后端的 Cairo 绘图模型将贯穿于本指南。
import pygtk
pygtk.require('2.0')
import gtk
class CairoText:
def __init__(self):
self.window = gtk.Window(gtk.WINDOW_TOPLEVEL)
self.window.connect('expose_event', self.on_expose_event)
self.window.connect('destroy', lambda w: gtk.main_quit())
self.window.set_position(gtk.WIN_POS_CENTER)
self.window.set_default_size( 320, 48)
self.window.set_app_paintable(True)
self.window.show_all()
def on_expose_event(self, widget, event, data=None):
cr = widget.window.cairo_create()
cr.set_source_rgb(0.627, 0, 0)
cr.set_font_size(24.0)
cr.move_to(10.0, 34.0)
cr.show_text('Linux Deepin')
def main():
gtk.main()
if __name__ == '__main__':
CairoText()
main()
Copy the Code
这个示例程序运行后,会在屏幕中央跳出一个 GTK+ 窗口,上面绘制了一串文本,如下图所示:
window 7下运行效果:
QQ截图20111208041701.png
Linux deepin下运行效果:
linuxd.png
首先要import gtk库
import gtk
Copy the Code
当 GTK+窗口被重绘时,会发出 expose-event 信号,我们可将这一信号连接到 on_expose_event () 回调函数上。
self.window.connect('expose_event', self.on_expose_event)
Copy the Code
要在 GTK+ 窗口中绘制 Cairo 图形,可以使用 GtkDrawingArea widget 或者更为简单的 GtkWindow widget,本例选择 GtkWindow 。由 GtkWindow widget 对 expose-event 信号处理后,默认要重新绘制窗口背景,这会将我们在 on_expose_event () 函数中定义的 Cairo 图形覆盖掉,因此需要调用 widget_set_app_paintable () 函数通知 GTK+ 不要这么干。如果是在 GtkDrawingArea widget 中绘制 Cairo 图形,则可省区这一步。
self.window.set_app_paintable(True)
Copy the Code
最后Cairo 图形绘制工作是在 on_expose_event () 函数中进行的,在该函数中,我们为 GTK+ 系统创建了一个 Cairo 环境,并在该环境中绘制了一行文本。 :roll:
Reply
Like 0
Favorite
View the author
All Replies
No replies yet
Please
sign
in first
Recommended
Change
Deepin System Updates (2022.6.15)
New Thread
Rankings
7 days
30 days
90 days
1
buyike
146 posts
2
阿尼樱奈奈
101 posts
3
离
95 posts
4
晚秋(lateautumn)
71 posts
5
jjcui8595
70 posts
6
berners
66 posts
Popular Events
More
1. PNG 图像第一个示例 (example-1.c) 用于生成 PNG 图像。
效果图:
image.png_001.png
这个示例是一个很小的控制台程序,运行后可生成一份 PNG 图像文件。
2. PDF 文件在第二个示例 (example-2.c) 中,将使用 Cairo 生成一份 PDF 文件,其内容与第一个示例所生成的图像是相同的。
3. SVG 文件第三个示例演示如何使用 Cairo SVG 后端生成一份简单的 SVG (Scalble Vector Graphics) 文件。SVG 技术近几年很热门。
4. 在最后这个示例中,演示如何在 GTK 窗口中使用 Cairo 绘制图形。基于 GTK 后端的 Cairo 绘图模型将贯穿于本指南。
这个示例程序运行后,会在屏幕中央跳出一个 GTK+ 窗口,上面绘制了一串文本,如下图所示:
window 7下运行效果:
QQ截图20111208041701.png
Linux deepin下运行效果:
linuxd.png
首先要import gtk库
当 GTK+窗口被重绘时,会发出 expose-event 信号,我们可将这一信号连接到 on_expose_event () 回调函数上。
要在 GTK+ 窗口中绘制 Cairo 图形,可以使用 GtkDrawingArea widget 或者更为简单的 GtkWindow widget,本例选择 GtkWindow 。由 GtkWindow widget 对 expose-event 信号处理后,默认要重新绘制窗口背景,这会将我们在 on_expose_event () 函数中定义的 Cairo 图形覆盖掉,因此需要调用 widget_set_app_paintable () 函数通知 GTK+ 不要这么干。如果是在 GtkDrawingArea widget 中绘制 Cairo 图形,则可省区这一步。
最后Cairo 图形绘制工作是在 on_expose_event () 函数中进行的,在该函数中,我们为 GTK+ 系统创建了一个 Cairo 环境,并在该环境中绘制了一行文本。 :roll: