tkinter + turtle,自己制作一个绘图软件

tkinter + turtle,自己制作一个绘图软件

创作背景

  • 本菜鸡最近有个需求,就是用 tkinter 绘图
  • 一说 python 绘图,大家肯定都会想到 turtle 这个库,谁入门 python 都会先学到 turtle,然后自己 DIY 一下,绘制好多好看的图形
  • 但肯定也有很多人想过要在自己软件的 可视化界面 中绘图
  • 本菜鸡今天就来一步一步的教大家如何实现
    在这里插入图片描述

思路讲解

  1. 首先,创建画布 。As we all know,绘图,一定要有 画布 ,不管是在现实生活中还是在计算机中,有了 画布 ,我们的图才有地方显示

    • (总不能对着空气随手一画就显示出来吧?那是未来,不是现在)
    • 在这里插入图片描述
    • 所以我们的第一步就是要创建一个画布
    • 创建画布的方法就是利用 tkinter.Canvas 来给我们的软件创建一个画布,我们后续的绘图就都在这个画布上进行了
    • 代码如下
    •   import tkinter as tk
        # 创建一个窗口,作为我们程序的主窗口
        win = tk.Tk()
        # 创建画布
        canvas = tk.Canvas(win)
        canvas.pack()
        # 程序陷入循环,等待操作
        win.mainloop()
      
    • 要点:
      • 记得将 canvas 打包,否则窗口中是不会显示出来画布的
      • 记得加上 win.mainloop() ,否则窗口一闪而过,你就没机会了
      • (你看看给我点赞和收藏我还有机会吗?😢)
  2. 然后,我们就要 构造绘图函数 了。

    • 你问我为什么要构造绘图函数?
    • 那肯定是因为有较高的 可移植性
    • 可移植性 在这里是指,当我们要绘制不同的图形时,其他的包括 主体框架函数调用 之类的都不需要变化,只需要改变绘图函数,即可让我们的软件绘制出不同的图形
    • 在这里我以 五环图 为例,我们先使用 turtle 默认的窗口进行绘图,直到我们的绘图部分的代码没有问题了在进行下一步。
    • 代码如下
    •   import turtle
        
        def draw_Olympic_Rings():
        	# 设置画笔粗细
            turtle.width(10)
        	# 设置蓝色
            turtle.color('blue')
            # 移动到相应位置
            turtle.penup()
            turtle.goto(-90, 0)
            turtle.pendown()
            # 绘图
            turtle.circle(40)
        	# 以下同上
            turtle.color('black')
            turtle.penup()
            turtle.goto(0, 0)
            turtle.pendown()
            turtle.circle(40)
        
            turtle.color('red')
            turtle.penup()
            turtle.goto(90, 0)
            turtle.pendown()
            turtle.circle(40)
        
            turtle.color('orange')
            turtle.penup()
            turtle.goto(-45, -40)
            turtle.pendown()
            turtle.circle(40)
        
            turtle.color('green')
            turtle.penup()
            turtle.goto(45, -40)
            turtle.pendown()
            turtle.circle(40)
        
            turtle.done()
        
        draw_Olympic_Rings()
      
    • 绘图效果如下图所示
      -
    • 看起来也确实还不错的亚子
  3. 最后,万事俱备,只欠 组合 了。

    • 我们看一下 turtle 的官方文档
      在这里插入图片描述
    • 我们可以看到,如果要在我们的绘图软件中绘图,需要 创建画布作为 turtle 的运动场,并且,还需要 用上一步返回的对象指定 turtle 在哪里绘图
    • 一步一步来
    • 先创建一个画布,作为 turtle 的运动场,代码如下(在第一步的基础上),放入第二步的函数中
    • 然后把 TurtleScreen 对象设置为 turtle 的运动场
    • 代码如下
    •   def draw_Olympic_Rings():
        	# 创建一个画布并显示
        	canvas = tk.Canvas(win)
        	canvas.pack()
        	# 用画布创建一个 TurteScreen 对象
        	screen = turtle.TurtleScreen(canvas)
        	# 将 TurtleScreen 对象作为 turtle 的运动场
        	raw = turtle.RawTurtle(screen)
        	
        	# 这里是绘图的主要部分
        	
        	# 让 screen 对象陷入循环
        	screen.mainloop()
      
    • 此时,我们就将我们自己创建的软件窗口作为 turtle 绘图的画布了
    • 绘图函数就需要修改一下,将绘图函数中所有的 turtleraw (创建的 screen 对象)代替,例如,将 turtle.width(10) 修改为 raw.width(10)
    • 我们可以设置一个按钮,点击按钮后进行绘图

成果展示

  • 总代码
# -*- coding=utf-8 -*-
# @Time    : 2021/6/17 23:57
# @Author  : lhys
# @FileName: Olympic_rings.py

import tkinter as tk
import turtle

def draw_Olympic_Rings():
    canvas = tk.Canvas(win)
    canvas.pack()

    screen = turtle.TurtleScreen(canvas)
    raw = turtle.RawTurtle(screen)
    raw.width(10)

    raw.color('blue')
    raw.penup()
    raw.goto(-90, 0)
    raw.pendown()
    raw.circle(40)

    raw.color('black')
    raw.penup()
    raw.goto(0, 0)
    raw.pendown()
    raw.circle(40)

    raw.color('red')
    raw.penup()
    raw.goto(90, 0)
    raw.pendown()
    raw.circle(40)

    raw.color('orange')
    raw.penup()
    raw.goto(-45, -40)
    raw.pendown()
    raw.circle(40)

    raw.color('green')
    raw.penup()
    raw.goto(45, -40)
    raw.pendown()
    raw.circle(40)

    screen.mainloop()

if __name__ == '__main__':
    win = tk.Tk()
    tk.Button(
        win,
        text='画五环图',
        command=lambda :draw_Olympic_Rings()
    ).pack()
    win.mainloop()
  • 效果图如下
    在这里插入图片描述
  • 成功完成需求!!!

写在后面

  • 这只是一个非常简陋的绘图软件,但我们要实现的主要功能都实现了
  • 大家可以根据自己的需要,美化一下主界面



结尾

以上就是我要分享的内容,因为学识尚浅,会有不足,还请各位大佬指正。
有什么问题也可在评论区留言。
在这里插入图片描述

  • 9
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 8
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值