python之:tkinter画哆啦A梦

博主在学习tkinter时,因资料稀缺和arc绘制问题感到困扰,通过小甲鱼的文档解决了起始角度问题。批评了tkinter画圆等图形的不便,并自行编写画圆函数。创建了显示鼠标坐标和图层切换功能的辅助工具,以提高绘制哆啦A梦图形的精确度。最后展示了完成后的效果。
摘要由CSDN通过智能技术生成

痛苦啊!tkinter资料不是很多,学习了3天了,至今没找到官方文档,画arc时遇到了困难,不知道起始角度怎么写,找了好多地方都没有介绍,最终无意间找到了小甲鱼整理的文档,终于解决。

此外,tkinter的画圆、弧、椭圆的方式,实在是太业余了。用起来很不顺手。难受!

思路:

  1. 用小甲鱼的哆啦A梦原图做canvas的背景,用来参考
  2. 设计一个工具看当前鼠标位置,方便找点
  3. 设计一个button来回切换背景和所画图形的位置,以此查看契合度。
  4. 用create_oval画圆实在太难用,而且圆是要做多地方的辅助线,所以自己写了个画圆函数,用惯了CAD的关系,感觉这种描述外面矩形的方式真的很脑残!
  5. 最终应注释掉所用工具,以免被用户使用。

工具展示:

1.鼠标点哪里就显示哪里的坐标,严格来说应该做一下canvasx(),canvasy()坐标系转换的,懒得做了。

v2-e77eda7b4e2eafd7c5725e921bef3dca_b.jpg


2.点change按钮可以调整图层前后,方便查看所画图形和原图契合度

v2-aec47d1b0e92fc67ee6c69ab014dad7c_b.jpg
所画图形在前

v2-62c4448ca7465a401d17416fd5a9c64b_b.jpg
所画图形在后


        绘制过程中的代码
from tkinter import *

#初始化
root=Tk()
global showflag
v=[IntVar(),IntVar()]
showflag=False  #函数hide()所用
w=Canvas(root,width=400,height=400,bg="pink")



def drawcircle(r,x,y,color):
    #自定义画圆函数,参数为:半径、圆心X,圆心Y,填充颜色
    rhead1=r
    xhead1=x
    yhead1=y
    w.create_oval(xhead1-rhead1,yhead1-rhead1,xhead1+rhead1,
              yhead1+rhead1,fill=color)

#临时设置的背景原图,方便查看我画的和原图的契合度
img=PhotoImage(file=r'C:\Users\Administrator.USER-20180904HO\Desktop\python\ameng.gif')
cankao1=w.create_image((204,203),image=img)

#辅助线
w.create_line(0,200,400,200,fill="gray",dash=(4))
w.create_line(200,0,200,400,fill="gray",dash=(4))


# 画头部(眼睛部分都是对称的,因为只画一次,直接写数字了。)
drawcircle(90,200,139,"dodgerblue") #头外圈
drawcircle(75,200,154,"white")  #头内圈
w.create_oval(163,64,200,109,fill="white") ##眼眶外圈
w.create_oval(400-163,64,400-200,109,fill="white")
w.create_oval(185,79,196,93,fill="black")   #黑眼球
w.create_oval(400-185,79,400-196,93,fill="black")
w.create_oval(189,82,193,90,fill="white") #黑眼球反白
w.create_oval(400-189,82,400-193,90,fill="white")
drawcircle(7,200,105,"red") #鼻子
w.create_line(200,112,200,
  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值