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

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

思路:

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

工具展示:

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

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

所画图形在前

所画图形在后
        绘制过程中的代码:
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=rxhead1=xyhead1=yw.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,178,fill="black")#裂唇
w.create_line(148,113,185,125,fill="black")#胡子
w.create_line(140,136,185,136,fill="black")
w.create_line(148,159,185,147,fill="black")
w.create_line(400-148,113,400-185,125,fill="black")
w.create_line(400-140,136,400-185,136,fill="black")
w.create_line(400-148,159,400-185,147,fill="black")
w.create_arc(135,50,265,178,start=-48,extent=-84,style=ARC)#嘴巴#画身体
w.create_rectangle(133,205,267,308,fill="dodgerblue") #主体
w.create_polygon((133,208),(133,246),(116,254),(106,236),outline="black",fill="dodgerblue") #手臂
w.create_polygon((400-133,208),(400-133,246),(400-116,254),(400-106,236),outline="black",fill="dodgerblue")
drawcircle(15,102,250.5,"white")#手
drawcircle(15,400-102,250.5,"white")
w.create_oval(117,300,192,329,fill="white")#脚
w.create_oval(400-117,300,400-192,329,fill="white")
w.create_arc(188,301,212,325,start=30,extent=120,outline="white",style=PIESLICE,fill="white")
#裤裆,先用白边白色扇形将蓝色擦除
w.create_arc(188,301,212,325,start=30,extent=120,style=ARC)
#裤裆,再用黑边白色弧形将描裤裆边缘 /:笑哭#画服饰
drawcircle(52,200,240,"white")#白肚皮
w.create_arc(148,188,252,292,start=45,extent=90,style=ARC,outline="white",width=3)
#用宽一些的白线擦掉白肚皮上面不需要的部分
w.create_line(133,202,267,202,capstyle=ROUND,fill="black",width=12)
#小围巾,想做到原图的黑边红里效果,就画了一根粗黑线和一根细红线,边缘正好差1个像素。
w.create_line(133,202,267,202,capstyle=ROUND,fill="red",width=10)
#小围巾,细红线
w.create_arc(163,201,237,275,extent=-180,style=PIESLICE,fill="white")
#肚兜
drawcircle(11,200,212,"yellow")
#小铃铛
drawcircle(2.5,200,217,"red")
#小铃铛装饰
w.create_line(200,219,200,223,fill="black")
w.create_line(190,212,212,212,fill="black")
w.create_line(191,209,211,209,fill="black")def location(event):
#定义一个关联事件,当鼠标点击时,显示点击坐标,方便找点   v[0]=event.xv[1]=event.yprint("坐标:",v[0],v[1])w.bind('<Button-1>',location)def hide():
#设计一个button来回切换背景和所画图形的位置,以此查看契合度。global showflagif showflag==True:w.lower(cankao1)showflag=Falseelse:w.lift(cankao1)showflag=True
Button(root,text="change",command=hide).pack(side=BOTTOM)w.pack()
mainloop()

绘制完成后,注释掉工具

最终代码

        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=rxhead1=xyhead1=yw.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,178,fill="black")#裂唇
w.create_line(148,113,185,125,fill="black")#胡子
w.create_line(140,136,185,136,fill="black")
w.create_line(148,159,185,147,fill="black")
w.create_line(400-148,113,400-185,125,fill="black")
w.create_line(400-140,136,400-185,136,fill="black")
w.create_line(400-148,159,400-185,147,fill="black")
w.create_arc(135,50,265,178,start=-48,extent=-84,style=ARC)#嘴巴#画身体
w.create_rectangle(133,205,267,308,fill="dodgerblue") #主体
w.create_polygon((133,208),(133,246),(116,254),(106,236),outline="black",fill="dodgerblue") #手臂
w.create_polygon((400-133,208),(400-133,246),(400-116,254),(400-106,236),outline="black",fill="dodgerblue")
drawcircle(15,102,250.5,"white")#手
drawcircle(15,400-102,250.5,"white")
w.create_oval(117,300,192,329,fill="white")#脚
w.create_oval(400-117,300,400-192,329,fill="white")
w.create_arc(188,301,212,325,start=30,extent=120,outline="pink",style=PIESLICE,fill="pink")
#裤裆,先用白边白色扇形将蓝色擦除,最终完成时修改为粉色
w.create_arc(188,301,212,325,start=30,extent=120,style=ARC)
#裤裆,再用黑边白色弧形将描裤裆边缘 /:笑哭#画服饰
drawcircle(52,200,240,"white")#白肚皮
w.create_arc(148,188,252,292,start=45,extent=90,style=ARC,outline="white",width=3)
#用宽一些的白线擦掉白肚皮上面不需要的部分
w.create_line(133,202,267,202,capstyle=ROUND,fill="black",width=12)
#小围巾,想做到原图的黑边红里效果,就画了一根粗黑线和一根细红线,边缘正好差1个像素。
w.create_line(133,202,267,202,capstyle=ROUND,fill="red",width=10)
#小围巾,细红线
w.create_arc(163,201,237,275,extent=-180,style=PIESLICE,fill="white")
#肚兜
drawcircle(11,200,212,"yellow")
#小铃铛
drawcircle(2.5,200,217,"red")
#小铃铛装饰
w.create_line(200,219,200,223,fill="black")
w.create_line(190,212,212,212,fill="black")
w.create_line(191,209,211,209,fill="black")'''def location(event):
#定义一个关联事件,当鼠标点击时,显示点击坐标,方便找点
    v[0]=event.x
    v[1]=event.y
    print("坐标:",v[0],v[1])

w.bind('<Button-1>',location)

def hide():
#设计一个button来回切换背景和所画图形的位置,以此查看契合度。
    global showflag
    if showflag==True:
        w.lower(cankao1)
        showflag=False
    else:
        w.lift(cankao1)
        showflag=True
Button(root,text="change",command=hide).pack(side=BOTTOM)
'''w.pack()
mainloop()

最终效果:

python之:tkinter画哆啦A梦相关推荐

  1. lisp的vla函数画矩形_python之:tkinter画哆啦A梦

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

  2. python画哆啦a梦 代码_python之:tkinter画哆啦A梦

    from tkinter import * #初始化 root=Tk() '''global showflagv=[IntVar(),IntVar()]showflag=False #函数hide() ...

  3. 用Python的Turtle画哆啦A梦

    这是我几年前为了练习python的turtle库而画的,今天翻出了代码,分享给大家. 这是我初学python时画的,当时还没有面向对象的概念,也没有采取类方法之类,纯原始手工,供大家参考. 若有兴趣可 ...

  4. python编程100例海绵宝宝-用python画哆啦a梦

    广告关闭 2017年12月,云+社区对外发布,从最开始的技术博客到现在拥有多个社区产品.未来,我们一起乘风破浪,创造无限可能. 也收到了读者想用 python 画各种图的各种需求. 和一些读者沟通后才 ...

  5. 用python画多来a梦-使用Python的Turtle绘制哆啦A梦实例

    这是我几年前为了练习python的turtle库而画的,今天翻出了代码,分享给大家. 这是我初学python时画的,当时还没有面向对象的概念,也没有采取类方法之类,纯原始手工,供大家参考. 若有兴趣可 ...

  6. 多啦a梦的python代码_分享一篇文本文档画哆啦A梦代码!

    #encoding=utf-8 #Drawcat 画多啦A梦 from turtle import * # 无轨迹跳跃 def my_goto(x, y): penup() goto(x, y) pe ...

  7. 用python画哆啦a梦的身体_每天一个Python小技巧,用Python 画个多啦A梦,小猪佩奇,文末还有Python入门学习视频...

    见网络上有人用Python 画出来个多啦A梦,很是新奇,来来来,我们看一下他们主要用到的库. 其实主要用的库就一个 turtle 库 先说明一下turtle绘图的基础知识: 1. 画布(canvas) ...

  8. 哆啦a梦简单图画python编程_[python]画哆啦A梦,Python,绘制

    from turtle import * #无轨迹跳跃 defmy_goto(x, y): penup() goto(x, y) pendown()#眼睛 defeyes(): fillcolor(& ...

  9. 用Python画哆啦A梦

    from turtle import *# 无轨迹跳跃 def my_goto(x, y):penup()goto(x, y)pendown()# 眼睛 def eyes():fillcolor(&q ...

最新文章

  1. crontab 知识查阅
  2. Camtasia Studio 7 试用笔记
  3. 人工智能:第五章 计算智能(2)
  4. JavaScript操作select控件
  5. 科学价值 社交关系 大数据_服务的价值:数据科学和用户体验研究美好生活
  6. java无序数组_Java查找不重复无序数组中是否存在两个数字的和为某个值
  7. 安恒发布态势感知通报预警中心——“先知”
  8. pytorch 实现 LSTM AutoEncoder 与案例
  9. 自学python买什么书比较好-python官方推荐30本面向初学者的书籍!你看过几本?...
  10. 【开发问题记录①】关于滑动CollectionView时ContentSize变化的问题
  11. C语言:使用函数输出一个数字构成的塔
  12. jQuery实现表格行的动态增加与删除(改进版)
  13. VMware虚拟机关闭U盘USB自动识别
  14. 地铁WIFI值28亿?运营商终于不用背锅了
  15. 自然语言处理中的文本聚类
  16. oracle中文转换为unicode,oracle 用函数unistr将Oracle数据库中的Unicode转换为中文
  17. 文华期货数据格式公布
  18. PicGo配置(gitee)
  19. 哥德巴赫猜想验证-循环
  20. 详细设计 英文_谷歌英文网站如何优化?

热门文章

  1. 如何在Word中给公式自动编号(LaTeX生成mathtype公式,公式居中,编号右对齐)
  2. 多态 什么是多态 多态转型 注意事项
  3. 期货反向跟单转型方案
  4. C#实现滑动拼图验证码
  5. 荐书:《分布式服务架构:原理、设计与实战》
  6. python合集(3)-------字符串
  7. 关系数据库中的码,主码,候选码,主属性,非主属性
  8. 解决Tomcat源服务器未能找到目标资源的表示或者是不愿公开一个已经存在的资源表示。
  9. Windows 2008系统如何取消Ctrl+Alt+Delete组合键登录
  10. 搜索引擎的三个时代及第三代搜索引擎的商业前景