pygam第3课——画图小程序

前言

我们前两节课已经学习了,界面的设计、图片的加载、那么今天我们将继续学习pygame的基础知识,我们的今天学习的内容是:`鼠标滑动时坐标的实时获取`、`鼠标的移动事件`、`鼠标的点击事件`、`图形绘制`等。希望大家能

1、搭建界面,如下如:

5个功能小图标

1、删除

2、画笔加粗

3、画笔减细

4、保存

5、橡皮擦

6个不同颜色的小方块代表调色板

在这里插入图片描述

2、图片素材自取:

画笔加粗图标:

点我保存

在这里插入图片描述

删除图标:

点我保存

在这里插入图片描述

画笔减细图标:

点我保存
在这里插入图片描述

橡皮擦图标:

点我保存
在这里插入图片描述

保存图标:

点我保存
在这里插入图片描述

背景(自己裁剪一下,把我的水印去掉)

在这里插入图片描述

3、图片的坐标,我已经给到:

sc.blit(up, (0, 0))
sc.blit(clear, (100, 50))
sc.blit(add, (180, 50))
sc.blit(cut, (260, 50))
sc.blit(eraser, (340, 50))
sc.blit(save, (420, 50))

4、小方块的制作方法是:

'''
参数:作用
sc             : 这是窗口对象
(r,g,b)        :rbg颜色,每个数字0- 255之间
(x, y, 宽, 高) :第1、2代表坐标,第3、4是小方块的宽和高
'''
pygame.draw.rect(sc, (255, 0, 0), (520, 30, 40, 40))
pygame.draw.rect(sc, (0, 255, 0), (580, 30, 40, 40))
pygame.draw.rect(sc, (0, 0, 255), (640, 30, 40, 40))
pygame.draw.rect(sc, (255, 255, 0), (520, 80, 40, 40))
pygame.draw.rect(sc, (0, 255, 255), (580, 80, 40, 40))
pygame.draw.rect(sc, (0, 0, 0), (640, 80, 40, 40))

其他的图形代码,可以上官网查看,点我查看

在这里插入图片描述

在这里插入图片描述

5、 界面搞定

图片有了,坐标有了,小方块颜色坐标也有了,那我们将界面搭建出来

在这里插入图片描述

界面代码:

# 用矩形函数绘制一个按钮,当鼠标点击按钮后,按钮随机变换一种颜色。
import pygame, time, sys
pygame.init()
a_list = ["./image/bg.jpg",
          "./image/add.png",
          "./image/cut.png",
          "./image/clear.png",
          "./image/eraser.png",
          "./image/save.png"]

bg = (255, 255, 255)  # RGB颜色 红绿蓝三原色
sc = pygame.display.set_mode((800, 600))
sc.fill(bg)
up = pygame.image.load(a_list[0])
add = pygame.image.load(a_list[1])
cut = pygame.image.load(a_list[2])
clear = pygame.image.load(a_list[3])
eraser = pygame.image.load(a_list[-1])
save = pygame.image.load(a_list[-2])
pygame.display.set_caption("Draw")
while True:
    sc.blit(up, (0, 0))
    sc.blit(clear, (100, 50))
    sc.blit(add, (180, 50))
    sc.blit(cut, (260, 50))
    sc.blit(eraser, (340, 50))
    sc.blit(save, (420, 50))
    pygame.draw.rect(sc, (255, 0, 0), (520, 30, 40, 40))
    pygame.draw.rect(sc, (0, 255, 0), (580, 30, 40, 40))
    pygame.draw.rect(sc, (0, 0, 255), (640, 30, 40, 40))
    pygame.draw.rect(sc, (255, 255, 0), (520, 80, 40, 40))
    pygame.draw.rect(sc, (0, 255, 255), (580, 80, 40, 40))
    pygame.draw.rect(sc, (0, 0, 0), (640, 80, 40, 40))
    pygame.display.update()
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            sys.exit()

常用的鼠标事件

事件作用
pygame.MOUSEBUTTONDOWN鼠标按下
pygame.MOUSEMOTION鼠标移动
pygame.MOUSEBUTTONUP鼠标松开

更多的事件可以官网查看:点我

在这里插入图片描述

6、下面是让鼠标画出线条

分析:

  • 1、我们需要实时定位鼠标在窗口的坐标

x, y = pygame.mouse.get_pos()
  • 2、鼠标左击并滑动时,画出线条

  • 3、鼠标松开时,画线条停止

  • 4、pygame没有直接画实时线条的代码,但是有话圆形的代码,无限的点连起来就是线条

  • 5、设置一个变量,鼠标按下为True,为True时可以无限画点,为False时停止

line = False
  • 6、设置一个变量,控制画笔粗细

pen_size = 10
  • 7、设置一个变量,表示初始画笔颜色

pen_color = (255, 0, 0)

7、事件监测的用法

一般写在主循环里:

while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            sys.exit()
        x, y = pygame.mouse.get_pos()
        if event.type == pygame.MOUSEBUTTONDOWN:
            pass
        elif event.type == 事件类型:
            检测到的执行代码
        elif event.type == 事件类型:
            检测到的执行代码
        elif event.type == 事件类型:
            检测到的执行代码
		...
		...

8、完整版代码:

在这里插入图片描述

# 用矩形函数绘制一个按钮,当鼠标点击按钮后,按钮随机变换一种颜色。
import pygame, time, sys

pygame.init()
a_list = ["./image/bg.jpg",
          "./image/add.png",
          "./image/cut.png",
          "./image/clear.png",
          "./image/eraser.png",
          "./image/save.png"]

bg = (255, 255, 255)  # RGB颜色 红绿蓝三原色
sc = pygame.display.set_mode((800, 600))
sc.fill(bg)
up = pygame.image.load(a_list[0])
add = pygame.image.load(a_list[1])
cut = pygame.image.load(a_list[2])
clear = pygame.image.load(a_list[3])
save = pygame.image.load(a_list[-1])
eraser = pygame.image.load(a_list[-2])
pygame.display.set_caption("Draw")
pen_color = (255, 0, 0)
pen_size = 10
line = False
while True:
    sc.blit(up, (0, 0))
    sc.blit(clear, (100, 50))
    sc.blit(add, (180, 50))
    sc.blit(cut, (260, 50))
    sc.blit(eraser, (340, 50))
    sc.blit(save, (420, 50))
    pygame.draw.rect(sc, (255, 0, 0), (520, 30, 40, 40))
    pygame.draw.rect(sc, (0, 255, 0), (580, 30, 40, 40))
    pygame.draw.rect(sc, (0, 0, 255), (640, 30, 40, 40))
    pygame.draw.rect(sc, (255, 255, 0), (520, 80, 40, 40))
    pygame.draw.rect(sc, (0, 255, 255), (580, 80, 40, 40))
    pygame.draw.rect(sc, (0, 0, 0), (640, 80, 40, 40))
    pygame.display.update()
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            sys.exit()
        x, y = pygame.mouse.get_pos()
        if event.type == pygame.MOUSEBUTTONDOWN:
            line = True

        elif event.type == pygame.MOUSEMOTION:
            if line == True:
                pygame.draw.circle(sc, pen_color, (x, y), pen_size)
                pygame.display.update()
        elif event.type == pygame.MOUSEBUTTONUP:
            line = False

        # 注释的是第三节的内容,整体是完整的代码
        if event.type == pygame.MOUSEBUTTONDOWN:
            # step1_1,实现清空功能
            if 100 < x < 140 and 50 < y < 90:
                sc.fill((255, 255, 255))
            # step2,实现宽度调整功能
            elif 180 < x < 220 and 50 < y < 90:
                pen_size += 2
            elif 260 < x < 300 and 50 < y < 90:
                pen_size -= 2
                # 画笔的粗细不能小于1
                if pen_size < 0:
                    pensize = 2
            # tep3,实现调色板与橡皮擦功能
            elif 520 < x < 560 and 30 < y < 70:
                pen_color = (255, 0, 0)
            elif 580 < x < 620 and 30 < y < 70:
                pen_color = (0, 255, 0)
            elif 640 < x < 680 and 30 < y < 70:
                pen_color = (0, 0, 255)
            elif 520 < x < 560 and 80 < y < 120:
                pen_color = (255, 255, 0)
            elif 580 < x < 620 and 80 < y < 120:
                pen_color = (0, 255, 255)
            elif 640 < x < 680 and 80 < y < 120:
                pen_color = (0, 0, 0)
            # 橡皮擦和画笔的原理是一样的,只是颜色与底色相同
            elif 340 < x < 380 and 50 < y < 90:
                pen_color = (255, 255, 255)

            # 知识进阶--保存作品
            elif 420 < x < 460 and 50 < y < 90:
                pygame.image.save(sc, "./我的作品.png")

总结

希望对大家有帮助

致力于办公自动化的小小程序员一枚#

都看到这了,关注+点赞+收藏=不迷路!!

如果你想知道更多关于Python办公自动化的知识各位大佬给个关注吧!

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一晌小贪欢

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值