使用Python和Pygame创建简易画图软件



这是一个Python脚本,允许用户通过**Pygame**库在屏幕上绘图。它记录鼠标事件以实现绘图功能,每次新的绘制都可能使用随机颜色,并且笔刷大小也是可选择的。该脚本清晰地展示了基于块的编程的主要思想,例如事件处理、绘图以及利用随机性控制视觉效果的概念,避免了不必要的复杂性。

所需库

要运行此脚本,您需要安装以下库:

Pygame

此库用于在Python中开发视频游戏和图形界面。它负责管理窗口、捕获用户输入,甚至在屏幕上绘图。

进入终端并运行以下代码:

pip install pygame

创建简易画图软件的步骤

步骤1:导入必要的模块

**您需要导入**pygame – 它提供创建绘图界面所需的功能

以及**random** – 用于为每次新的笔触生成随机颜色。

import pygame, random

步骤2:初始化Pygame

要初始化pygame,请使用init()方法。以下代码语句用于初始化pygame:

pygame.init()

步骤3:设置显示

**使用以下代码语句**创建一个大小为1024x768像素的窗口,绘图将在其中进行:

screen = pygame.display.set_mode((1024, 768))

步骤4:初始化绘图设置

要初始化绘图设置,请使用以下变量:

  • **draw_on** – 一个布尔标志,跟踪鼠标按钮是否按下。
  • **last_pos** – 用于跟踪上一个鼠标位置以绘制连续线。
  • **color** – 初始笔刷颜色,设置为蓝色阴影。
  • **radius** – 笔刷大小,设置为15像素。

以下代码语句用于初始化绘图设置:

draw_on = False
last_pos = (0, 0)
color = (0, 128, 255)
radius = 15

步骤5:定义圆形线条函数

以下是定义圆形线条函数的代码:

def roundline(srf, color, start, end, radius=1):
   dx = end[0] - start[0]
   dy = end[1] - start[1]
   distance = max(abs(dx), abs(dy))
   for i in range(distance):
      x = int(start[0] + float(i) / distance * dx)
      y = int(start[1] + float(i) / distance * dy)
      pygame.draw.circle(srf, color, (x, y), radius)

步骤6:处理退出事件

要处理退出事件,请使用以下代码:

e = pygame.event.wait()
if e.type == pygame.QUIT:
   raise StopIteration

步骤7:处理鼠标按钮按下事件

要处理鼠标按钮按下事件,请使用以下代码:

if e.type == pygame.MOUSEBUTTONDOWN:
   color = (random.randrange(100, 256), random.randrange(100, 256), random.randrange(100, 256))
   pygame.draw.circle(screen, color, e.pos, radius)
   draw_on = True

步骤8:处理脚本终止

使用以下代码处理脚本终止:

except StopIteration:
   pass
pygame.quit()

使用Python和Pygame创建简易画图软件的代码

import pygame, random

# Initialize Pygame
pygame.init()

# Set up the display
screen = pygame.display.set_mode((1024, 768))  # Changed resolution to 1024x768

# Initialize drawing settings
draw_on = False
last_pos = (0, 0)
color = (0, 128, 255)  # Changed initial color to a blue shade
radius = 15  # Increased the brush size to 15

def roundline(srf, color, start, end, radius=1):
   dx = end[0] - start[0]
   dy = end[1] - start[1]
   distance = max(abs(dx), abs(dy))
   for i in range(distance):
      x = int(start[0] + float(i) / distance * dx)
      y = int(start[1] + float(i) / distance * dy)
      pygame.draw.circle(srf, color, (x, y), radius)

try:
   while True:
      e = pygame.event.wait()
      if e.type == pygame.QUIT:
         raise StopIteration
      if e.type == pygame.MOUSEBUTTONDOWN:
         color = (random.randrange(100, 256), random.randrange(100, 256), random.randrange(100, 256))  # Restricted color range to brighter colors
         pygame.draw.circle(screen, color, e.pos, radius)
         draw_on = True
      if e.type == pygame.MOUSEBUTTONUP:
         draw_on = False
      if e.type == pygame.MOUSEMOTION:
         if draw_on:
            pygame.draw.circle(screen, color, e.pos, radius)
            roundline(screen, color, e.pos, last_pos, radius)
         last_pos = e.pos
      pygame.display.flip()

except StopIteration:
   pass

pygame.quit()

输出

执行此脚本后,将创建一个背景颜色为白色的窗口,没有任何其他内容。当您使用鼠标单击并拖动时,颜色路径会像虚拟地跟随光标一样出现。每次您开始新的笔触时,选择的颜色都会与之前的颜色不同,因此您正在主动绘图。

Pygame

使用鼠标右键,您也可以这样绘图。

代码解释

  • 脚本首先导入一些模块:用于图形和输入控制的 Pygame;用于随机颜色创建的 random。
  • 它只启动 Pygame 并打开具有所需分辨率的绘图窗口。
  • 首先,设置绘图的各个方面,例如颜色选择和绘图所用画笔的大小。
  • 创建了一个辅助函数 `roundline`,以便在需要时使绘制的线条更平滑。
  • 主循环的目的是处理不同的事件,例如鼠标点击和移动,并在画布上绘图。

同时,频繁更新显示绘图的显示屏,以实时反映绘图。

  • 当用户关闭窗口时,脚本也会停止运行,因此在脚本终止时不会执行任何突然的操作。
  • 每次新的鼠标点击都会产生新的颜色,这使得它成为一个有趣的绘图工具。
  • 绘图基于光标的移动,并借助持续的事件处理实现交互性。
  • 最后,脚本退出 Pygame,这也关闭了正在绘制形状的窗口。
  • 虽然非常基础——但此脚本提供了一个很好的示例,说明了如何使用 Python 和 Pygame 接受用户输入以及绘制图形图像。
python_reference.htm
广告
© . All rights reserved.