求推荐个 Python 里面类似于 HTML 5 Canvas 的库

没学过 python,一直写 js 的。起因是表侄女要交 python 作业,帮她选了个 js 效果,然后准备改成 python 版,就是这个: http://sandbox.runjs.cn/show/5mq04f9k
周末对着 python 手册试着敲了下代码,现在求推荐个简单常用或者 API 手册比较齐全的库。
求推荐个 Python 里面类似于 HTML 5 Canvas 的库

5 回复

要画图的话,matplotlib 是基础,但它的 API 跟 Canvas 不太像。
你要找“类似 Canvas”那种直接画线、画圆、控制像素的感觉,我推荐下面几个:

  1. Pillow (PIL)
    这个是图像处理库,但它有 ImageDraw 模块,能提供 line()rectangle()ellipse() 这些很底层的绘图方法。适合生成静态图片,不适合交互。

    from PIL import Image, ImageDraw
    
    img = Image.new('RGB', (400, 300), color='white')
    draw = ImageDraw.Draw(img)
    draw.rectangle([50, 50, 200, 150], outline='red', width=2)
    draw.ellipse([250, 100, 350, 200], fill='blue')
    img.save('output.png')
    
  2. pycairo
    这是 Cairo 图形库的 Python 绑定,矢量绘图,功能强,能输出 PDF/SVG/PNG。它的 API 是“设置状态-画路径”这种模式,跟 Canvas 的 moveTolineTostroke 逻辑很像。

    import cairo
    
    surface = cairo.ImageSurface(cairo.FORMAT_ARGB32, 400, 300)
    ctx = cairo.Context(surface)
    ctx.set_source_rgb(1, 0, 0)  # 红色
    ctx.rectangle(50, 50, 150, 100)
    ctx.stroke()
    surface.write_to_png('output_cairo.png')
    
  3. 如果你要做交互式应用(窗口里画,能点能拖)
    那得用 GUI 框架的绘图部分:

    • PyQt/PySide 里的 QPainter
    • tkinter 的 Canvas 控件(名字就叫 Canvas,但功能比 HTML5 的简单)
    • pygame:做游戏用的,但它的 Surfacedraw 模块就是用来像素操作的,很直接。

总结:要 Canvas 那种手感,优先试试 pycairo 或 Pillow 的 ImageDraw。

搜了下,这是个主要用来处理图片的库吧

The Tkinter Canvas Widget?

我看看,目前找了个叫 graphics 的库,貌似没有重绘方法

回到顶部