⑴ python tkinter怎么用canvas实现按顺序画图
python简述:
Python是一种解释型、面向对象、动态数据类型的高级程序设计语言。自从20世纪90年代初Python语言诞生至今,它逐渐被广泛应用于处理系统管理任务和Web编程。Python[1]已经成为最受欢迎的程序设计语言之一。2011年1月,它被TIOBE编程语言排行榜评为2010年度语言。自从2004年以后,python的使用率是呈线性增长。
tkinter模块介绍
tkinter模块(“Tk 接口”)是Python的标准Tk GUI工具包的接口.Tk和Tkinter可以在大多数的Unix平台下使用,同样可以应用在Windows和Macintosh系统里.,Tk8.0的后续版本可以实现本地窗口风格,并良好地运行在绝大多数平台中。
由于Tkinter是内置到python的安装包中、只要安装好Python之后就能import Tkinter库、而且IDLE也是用Tkinter编写而成、对于简单的图形界面Tkinter还是能应付自如。
八、显示文字
用create_text在画布上写字。这个函数只需要两个坐标(文字x和y的位置),还有一个具名参数来接受要显示的文字。例如:
>>> from tkinter import*>>> tk = Tk()>>> canvas = Canvas(tk,width=400,height=400)>>> canvas.pack()>>> canvas.create_text(150,100,text='Happy birthday to you')
注:用tkinter只能装入GIF图片,也就是扩展名是.gif的图片文件。
想要显示其他类型的图片,如PNG和JPG,需要用到其他的模块,比如Python图像库。
十、创建基本的动画
创建一个填了色的三角形,让它在屏幕上横向移动:
import timefrom tkinter import*tk = Tk()canvas = Canvas(tk,width=400,height=200)canvas.pack()canvas.create_polygon(10,10,10,60,50,35) ##创建三角形for x in range(0,60): canvas.move(1,5,0) ##把任意画好的对象移动到把x和y坐标增加给定值的位置 tk.update() ##强制tkinter更新屏幕(重画) time.sleep(0.05) ##让程序休息二十分之一秒(0.05秒),然后再继续
三角形横向移动
延伸一下,如果想让三角形沿对角线在屏幕上移动,我们可以第8行为:
import timefrom tkinter import*tk = Tk()canvas = Canvas(tk,width=400,height=400)canvas.pack()canvas.create_polygon(10,10,10,60,50,35) ##创建三角形for x in range(0,60): canvas.move(1,5,5) ##把任意画好的对象移动到把x和y坐标增加给定值的位置 tk.update() ##强制tkinter更新屏幕(重画) time.sleep(0.05) ##让程序休息二十分之一秒(0.05秒),然后再继续
三角形沿对角线移动
如果要让三角形在屏幕上沿对角线回到开始的位置,要用-5,-5(在结尾处加上这段代码)
import timefrom tkinter import*tk = Tk()canvas = Canvas(tk,width=400,height=400)canvas.pack()canvas.create_polygon(10,10,10,60,50,35) ##创建三角形for x in range(0,60): canvas.move(1,5,5) ##把任意画好的对象移动到把x和y坐标增加给定值的位置 tk.update() ##强制tkinter更新屏幕(重画) time.sleep(0.05) ##让程序休息二十分之一秒(0.05秒),然后再继续for x in range(0,60): canvas.move(1,-5,-5) tk.update() time.sleep(0.05)
对角线运动并回到初始位置
十一、让对象对操作有反应
我们可以用“消息绑定”来让三角形在有人按下某键时有反应。
要开始处理事件,我们首先要创建一个函数。当我们告诉tkinter将某个特定函数绑到(或关联到)某个特定事件上时就完成了绑定。
换句话说,tkinter会自动调用这个函数来处理事件。
例如,要让三角形在按下回车键时移动,我们可以定义这个函数:
def movetriangle(event): canvas.move(1,5,0)
这个函数只接受一个参数(event),tkinter用它来给函数传递关于事件的信息。现在我们用画布canvas上的bind_all函数来告诉tkinter当特定事件发生时应该调用这个函数。代码如下:
from tkinter import*tk = Tk()canvas = Canvas(tk,width=400,height=400)canvas.pack()canvas.create_polygon(10,10,10,60,50,35)def movetriangle(event): canvas.move(1,5,0)canvas.bind_all('<KeyPress-Return>',movetringle) ##让tkinter监视KeyPress事件,当该事件发生时调用movetriangle函数
那么我们如何根据按键的不同而改变三角形的方向呢?比如用方向键。
我们可以尝试改下movetriangle函数:
def movetriangle(event): if event.keysym == 'up': canvas.move(1,0,-3) ##第一个参数使画布上所画的形状的ID数字,第二个是对x(水平方向)坐标增加的值,第三个是对y(垂直方向)坐标增加的值 elif event.keysym == 'down': canvas.move(1,0,3) elif event.keysym == 'left': canvas.move(1,-3,0) else canvas.move(1,3,0)
最后代码汇总在一起为:
from tkinter import*tk = Tk()canvas = Canvas(tk,width=400,height=400)canvas.pack()canvas.create_polygon(10,10,10,60,50,35)def movetriangle(event): if event.keysym == 'Up': canvas.move(1,0,-3) ##第一个参数使画布上所画的形状的ID数字,第二个是对x(水平方向)坐标增加的值,第三个是对y(垂直方向)坐标增加的值 elif event.keysym == 'Down': canvas.move(1,0,3) elif event.keysym == 'Left': canvas.move(1,-3,0) else: canvas.move(1,3,0)canvas.bind_all('<KeyPress-Up>',movetriangle) ##让tkinter监视KeyPress事件,当该事件发生时调用movetriangle函数canvas.bind_all('<KeyPress-Down>',movetriangle)canvas.bind_all('<KeyPress-Left>',movetriangle)canvas.bind_all('<KeyPress-Right>',movetriangle)
方向键控制三角形的移动
十二、更多使用ID的方法
只要用了画布上面以create_开头的函数,它总会返回一个ID。这个函数可以在其他的函数中使用。
如果我们修改代码来把返回值作为一个变量保存,然后使用这个变量,那么无论返回值是多少,这段代码都能工作:
>>> mytriangle = canvas.create_polygon(10,10,10,60,50,35)>>> canvas.move(mytriangle,5,0)
我们可以用itemconfig来改变三角形的颜色,这需要把ID作为第一个参数:
>>> canvas.itemconfig(mytrigle,fill='bue') ##把ID为变量mytriangle中的值的对象的填充颜色改为蓝色
也可以给三角形一条不同颜色的轮廓线,同样适用ID作为第一个参数:
>>> canvas.itemconfig(mytrigle,outline='red')
总结做出了简单的动画。学会了如何用事件绑定来让图形响应按键,这在写计算机游戏时很有用。在tkinter中以create开头的函数是如何返回一个ID数字。
已经学习Python两天,最开始是想着是通过觉得用它写个动画或者画个图形比较方便,而且界面美观,比黑洞洞的dos窗口好多了,准备写个程序送个一女孩作为生日礼物(去年答应好的)。经过这两天的学习,我慢慢发觉了Python语言的优点,其最主要的就是易学,而且可以调用各种库。
⑵ python 如何控制图片移动
matplotlib是绘制二维图形的Python模块,它用Python语言实现了MATLAB画图函数的易用性,同时又有非常强大的可定制性
⑶ python处理图片数据
生成一张纯色的图片
先设置图片的颜色,接着利用Image模块的new方法新生成一张图片,png格式的图片需要设置成rgba,类似的还有rgb,L(灰度图等),尺寸设定为640,480,这个可以根据自己的情况设定,颜色同样如此。
⑷ python中图例的位置怎么手动调整
1.最近遇到一个问题,关于图例legend如何画在图外的问题,并以适合的比例显示出来。
2.首先传统的做法如下,这种方式并不能满足我的要橘橡圆求,而且是显示在图内。
ax1.legend(loc='center left', bbox_to_anchor=(0.2, 1.12),ncol=3)1
loc表示图例的位置,有多种形式:
‘North’ 图例标识放在图顶端
‘South’ 图例标识放在图底端
‘East’ 图例标识放在图右方
‘West’ 图例标识放在图左方
‘NorthEast’ 图例标识放在图右上方(默认)
‘NorthWest 图例标识放在图左上方
‘SouthEast’ 图例标识放在图右下角
‘SouthWest’ 图例标识放在图左下角12345678
有人说简单,有相同的方式,如下经测试不行,可能是本人用的python版本不行,所用的方式就是和前面一样,采用如下的方式来替换上面的legend位置。
‘NorthOutside’ 图例标识放在图框外侧上方
‘SouthOutside’ 图例标识放在图框外侧下方
‘EastOutside’ 图例标识放在图框外侧右方
‘WestOutside’ 图例标识放在图框外侧左方
‘NorthEastOutside’ 图例标识放在图框外侧右上方
‘NorthWestOutside’ 图例标识放在图框外侧左上方
‘SouthEastOutside’ 图例标识放在图框外侧右下方
‘SouthWestOutside’ 图例标识放在图框外侧左下方
(以上几个将图例标识放在框图外)
‘Best’ 图标标识放在图框内不与图冲突的最佳位置
‘如扰BestOutside’ 图标标识放在图框外使用最小空间的最佳位置1234567891011
bbox_to_anchor:表示legend的位置,前一个表示左右,后一个表示上下。当使用这个参数时。loc将不再起正常的作用,ncol=3表示图例三列显示。
3.有人说要解决这个问题可以采用对坐标轴放大或是缩小的方式,经本人测试可以行,但是,放大缩小的比率不让人满意,且很难控制到适合的位置。有兴趣可以参考链接,最终得出此方法不行。
4.那么就没有办法了吗?NO.NO,请看下面,最终完成如下。
这就是本人要的效果,不废话,具体做法如下
box = ax1.get_position()
ax1.set_position([box.x0, box.y0, box.width , box.height* 0.8])12
首先按上面的方式,如果你想将图例放上面就box.height*0.8,放右边就box.width*0.8其它方式一样。同时配合下面来使用。
ax1.legend(loc='center left', bbox_to_anchor=(0.2, 1.12),ncol=3)1
主要是bbox_to_anchor的使用,自己可以修改参数试下,good luck for you.
阅读全文
版权声明:原创圆塌文章,未经博主
⑸ python plt.imshow 怎么用
用法以既步骤:
1、给出一张图片。