Home
Categories
WIKI
Topic
User
LANGUAGE:
中文
English
Cairo 图形指南 for Python (3) —— Cairo 后端
社区开发
2532
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
New Thread
Popular Ranking
Change
deepin donwloader don't catch download launch from browsers
deepin 23 internal testing update on December 20, 2024
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: