【问题标题】:Platform-independent, real-time canvas drawing?独立于平台的实时画布绘图?
【发布时间】:2019-06-20 19:25:07
【问题描述】:

我想在画布上实时绘图,可能设置单个像素,绘制矩形等几何形状,并插入图像。

这就是我想要的样子:

from greatgui import Window, Canvas
from time import sleep

width = 640
height = 480

w = Window("My title", (width,height))
c = Canvas((width, height))

w.add(c)

i = 0

while True:
    c.putpixel((i, i), color=(255,255,255))
    i += 1
    w.update()
    sleep(0.1)

任何更复杂或设置成本更高的事情都是不可接受的。我倒霉了吗?

我还没有找到一个不需要我这样做的 GUI 框架示例:

  • 创建数十行样板代码和平台检查
  • 安装任何额外的东西(尤其是手动编译的东西!),除了通过 pip
  • 在一些框架中添加一些回调钩子
  • 将控制权完全转移到任何主循环
  • 放弃 Pillow 的 ImageDraw 模块的所有舒适性

【问题讨论】:

  • 您为什么希望编程语言具备这种能力?像绘画这样的程序可以用来做你想做的所有事情。除非有人为做这件事制作了一个包,否则你可能不走运。
  • @will.evo 我不想创建静态图像,否则我会直接使用 Pillow 的 ImageDraw。每当我想可视化动态系统时,这种实时绘图(至少对我而言)是一个非常常见的用例。到目前为止,我不得不求助于将单个图像保存到某个目录中,然后将其转换为 gif。然而,这是非常缓慢、低效且不立即的。
  • 也许看看beeware

标签: python python-3.x graphics real-time


【解决方案1】:

到目前为止https://www.pygame.org似乎是一个不错的选择:

import pygame
from time import sleep

pygame.init()
pygame.display.set_caption("My title")

screen = pygame.display.set_mode((640,480))

background_color = (255, 255, 255)

i = 0
running = True
while running:
    screen.fill(background_color)

    pygame.draw.rect(screen, (255, 0, 0), pygame.Rect(i, i, 40, 30))
    i += 1

    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

    pygame.display.flip()
    sleep(0.1)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-25
    • 2012-12-19
    • 1970-01-01
    • 2013-04-05
    相关资源
    最近更新 更多