痛苦啊!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:UsersAdministrator.USER-20180904HODesktoppythonameng.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:UsersAdministrator.USER-20180904HODesktoppythonameng.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.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()

最终效果:

lisp的vla函数画矩形_python之:tkinter画哆啦A梦相关推荐

  1. python之:tkinter画哆啦A梦

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

  2. lisp的vla函数画矩形_利用Lisp做Tin三角网建模(源代码)

    我参考的是这篇老外的帖子,原文不再翻译,有兴趣的可以百度自己查看 Q1:根据图面三角网内插方格网节点高程(LISP) ;;框选范围内交点插入图块  By Gu_xl 2011.04 ;;双线性内插计算 ...

  3. lisp的vla函数画矩形_难点解析丨反比例函数的图象和性质

    函数的相关知识作为每年各省市中考的热门考点问题,主要考察学生能否结合具体实际情境了解函数的相关的意义,能否正确画出相关函数的图象并理解相关函数的性质 其中反比例函数的考查形式主要是联系一次函数.二次函 ...

  4. lisp的vla函数画矩形_AutoLISP反应器vlr-object-reactor函数应用

    AutoLISP反应器vlr-object-reactor函数应用,代码如下. (defun c:tt (/ line line_handle txt txt_line txt_line_reacto ...

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

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

  6. python海龟画哆啦a梦_python 海龟绘图画哆啦A梦

    import turtle as t #定位 def my_goto(x,y): t.up() t.goto(x,y) t.down() #眼睛 def eyes(): t.tracer(False) ...

  7. 用python画哆啦a梦的代码解释_python画哆啦A梦和大雄

    最近从后台收到的消息来看,不少读者对 python 的 turtle 这个库感兴趣,也收到了读者想用 python 画各种图的各种需求.和一些读者沟通后才知道是学校布置了相关的作业,或者是自己想用这个 ...

  8. python画图哆啦a梦大作业_Python—turtle画图(哆啦A梦)

    [知识延伸] 在Python中有一个名为turtle的工具,也可以称他为画图工具,这是一种Python所独有的工具.是他为我们所包装好的模块,在这里 [要求] 今天我们利用turtle画图来绘制一个哆 ...

  9. python绘制哆啦a梦实训报告_python画哆啦A梦和大雄

    最近从后台收到的消息来看,不少读者对 python 的 turtle 这个库感兴趣,也收到了读者想用 python 画各种图的各种需求.和一些读者沟通后才知道是学校布置了相关的作业,或者是自己想用这个 ...

最新文章

  1. 鸟哥的Linux私房菜(基础篇)- 第十八章、认识系统服务 (daemons)
  2. antd 表单域验证规则 - 只能输入数字字符,去除前导0
  3. 中国水泥基防水行业市场供需与战略研究报告
  4. 【HDFS】hdfs与fsck结合使用
  5. Python—字典(当索引不好用时)
  6. 黑马程序员_java基础笔记(09)...HTML基本知识、CSS、JavaScript、DOM
  7. java俄罗斯方块算法_【俄罗斯方块java】分享一个Java写的俄罗斯方块源码 算法简单(300行) 注释详细!...
  8. 防腐投加器需要加盐吗_什么情况下需要往鱼缸里加盐?盐有什么作用?
  9. 做过的医药类DA及产品宣传单页
  10. Lightgbm模型两种保存方式
  11. 易企秀 伪静态 linux,最新仿易企秀V15.1完整版开源版源码分享,修复采集功能,新增同行站模板采集功能等等...
  12. bailian2705
  13. 35岁程序员:被大厂裁员后,我赚到手的却是这样:
  14. JSP-----JSP简介
  15. PMBOK(第五版)学习笔记 —— ITTO(输入、工具与技术及输出)汇总
  16. 记录一次与autorun.inf病毒的较量
  17. 2023 年10款「会议管理」软件对比
  18. 2018-8-10-WPF-好看的矢量图标
  19. 命令消费kafka报错(id: -1 rack: null) disconnected
  20. 在MATLAB中如何读取心音信号,基于Matlab的心音信号分析比较研究_问答库

热门文章

  1. 大剑无锋之post那么多优点,为什么还用get
  2. java小编程-----读取文本文件csb.txt,统计字符个数,并把结果保存到result.txt
  3. leetcode 658. Find K Closest Elements | 658. 找到 K 个最接近的元素(二分查找+双指针)
  4. tmux 如何自定义背景颜色 | How does the tmux color palette work?
  5. CentOS7升级Python2.7.5至2.7.13版本
  6. 【Python】部分基础+Flask/JSON/....+零碎笔记
  7. 【Python】Flask框架系列(一):安装、页面跳转/重定向、模板、逻辑语句、过滤器、继承/使用block、url链接/加载静态资源
  8. 【CentOS7配置】如何设置:启动后自动获取网络连接、配置固定IP
  9. java安全编码指南之:Mutability可变性
  10. 【三次优化】剑指 Offer 35. 复杂链表的复制