Python中如何在屏幕上画图?

我要做一个鼠标手势的软件,发现不知道怎么像其他软件那样在屏幕上画出鼠标轨迹. 我想要做到以下 4 点:

  1. 不被覆盖
  2. 可以连在一起
  3. 可以调节颜色粗细
  4. 不显示窗体

就是不知道怎么做.

我试了一下海龟,发现会显示一个窗体.

试了一下 win32gui,发现不知道怎么调节粗细和颜色,而且.. sxaas 这是用了 point

sxaas 这是 lineto 而且搞完会因为刷新而消失


Python中如何在屏幕上画图?

14 回复

用Python在屏幕上画图,最直接的方法是使用 turtle 库(适合初学者和简单图形)或更强大的 pygame 库(适合游戏和复杂图形)。下面是两个最常用的方法:

1. 使用 turtle 库(内置,简单易学) turtle 是Python标准库的一部分,它提供一个“海龟”在画布上移动来绘图。

import turtle

# 创建一个屏幕和一个海龟
screen = turtle.Screen()
screen.title("Turtle 绘图示例")
t = turtle.Turtle()

# 画一个正方形
for _ in range(4):
    t.forward(100)  # 向前移动100像素
    t.right(90)     # 右转90度

# 画一个圆
t.penup()          # 抬起笔,移动时不画线
t.goto(150, 0)     # 移动到新位置
t.pendown()        # 落下笔
t.circle(50)       # 画一个半径为50的圆

# 保持窗口打开,直到点击关闭
screen.mainloop()

2. 使用 pygame 库(功能强大,适合动态图形) pygame 是一个流行的游戏开发库,可以完全控制像素级的绘图。

import pygame
import sys

# 初始化pygame
pygame.init()

# 设置窗口尺寸
width, height = 800, 600
screen = pygame.display.set_mode((width, height))
pygame.display.set_caption("Pygame 绘图示例")

# 定义颜色
WHITE = (255, 255, 255)
RED = (255, 0, 0)
BLUE = (0, 0, 255)

# 主循环
running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

    # 用白色填充背景
    screen.fill(WHITE)

    # 画一个红色的矩形 (左上角x, 左上角y, 宽度, 高度)
    pygame.draw.rect(screen, RED, (100, 100, 200, 150))

    # 画一个蓝色的圆 (圆心x, 圆心y, 半径)
    pygame.draw.circle(screen, BLUE, (400, 300), 75)

    # 画一条线 (起点x, 起点y, 终点x, 终点y)
    pygame.draw.line(screen, (0, 0, 0), (50, 500), (750, 500), 5)

    # 更新显示
    pygame.display.flip()

# 退出pygame
pygame.quit()
sys.exit()

总结:

  • turtle:适合教学、绘制分形或简单的几何图形,语法直观。
  • pygame:适合需要实时交互、动画或更复杂图形应用的场景。

根据你的具体需求选择合适工具。

挽尊*2

建议打开微软的文档了解一下 Win32 API,Python 只是封装了一下

楼主不嫌折腾可以试试 brlcad: https://brlcad.org/

python 库吗?

不是 是一个命令行的 cad 软件。。。。貌似我理解题目错误了 抱歉

#8 谢谢你的回答

用海龟画过圈圈诅咒过领导. 哈哈.

#10 这么厉害的吗

wxpython in action 这本书里有你这么一个例子,你可以网上找 pdf,好像在第 6 章还是第七章

<br>import wx<br>import time<br>app = <a target="_blank" href="http://wx.App" rel="nofollow noopener">wx.App</a>(False)<br>s = wx.ScreenDC()<br>s.Pen = wx.Pen("#FF0000")<br>s.DrawLine(60,60,120,120)<br><br>
用 wxpython
刚找到的, 问题是画完之后不知道怎么清除已经画上去的东西。

回到顶部