使用Python中的tkinter模块作图的方法


Posted in Python onFebruary 07, 2017

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')

使用Python中的tkinter模块作图的方法

create_text函数还有几个很有用的参数,比方说字体颜色等。在下面的代码中,我们调用create_text函数时使用了坐标(130,120),还有要显示的文字,以及红色的填充色:

canvas.create_text(130,120,text='Happy birthday to you!',fill='red')

我们还可以指定字体,方法是给出一个包含字体名和字体大小的元组。例如大小为20的Times字体就是('Times',20):

>>> canvas.create_text(150,150,text='Happy birthday',font=('Times',15))>>> canvas.create_text(200,200,text='Happy birthday',font=('Courier',22))>>> canvas.create_text(220,300,text='Happy birthday',font=('Couried',30))

使用Python中的tkinter模块作图的方法

九、显示图片

要用tkinter在画布上显示图片,首先要装入图片,然后使用canvas对象上的create_image函数。

这是我存在E盘上的一张图片:

使用Python中的tkinter模块作图的方法

我们可以这样来显示one.gif图片:

>>> from tkinter import*>>> tk = Tk()>>> canvas = Canvas(tk,width=400,height=400)>>> canvas.pack()>>> my_image = PhotoImage(file='E:\\FFOutput\\one.gif')>>> canvas.create_image(0,0,anchor = NW,image = my_image) >>> canvas.create_image(50,50,anchor = NW,image = my_image)

在第五行中,把图片装入到变量my_image中。坐标(0,0)/(50,50)是我们要显示图片的位置, anchor=NW让函数使用左上角(northwest 西北方)作为画图的起始点,最后一个具名参数image指向装入的图片。

使用Python中的tkinter模块作图的方法

注:用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中的tkinter模块作图的方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Python 相关文章推荐
Python虚拟环境Virtualenv使用教程
May 18 Python
python保存网页图片到本地的方法
Jul 24 Python
Win8.1下安装Python3.6提示0x80240017错误的解决方法
Jul 31 Python
在PyCharm中三步完成PyPy解释器的配置的方法
Oct 29 Python
python Web flask 视图内容和模板实现代码
Aug 23 Python
python 实现提取log文件中的关键句子,并进行统计分析
Dec 24 Python
Pytorch实现LSTM和GRU示例
Jan 14 Python
Pycharm中Python环境配置常见问题解析
Jan 16 Python
给 TensorFlow 变量进行赋值的方式
Feb 10 Python
python实现文件分片上传的接口自动化
Nov 19 Python
关于pycharm 切换 python3.9 报错 ‘HTMLParser‘ object has no attribute ‘unescape‘ 的问题
Nov 24 Python
python3中数组逆序输出方法
Dec 01 Python
Scrapy-redis爬虫分布式爬取的分析和实现
Feb 07 #Python
详解python中字典的循环遍历的两种方式
Feb 07 #Python
python3使用PyMysql连接mysql数据库实例
Feb 07 #Python
Python处理文本文件中控制字符的方法
Feb 07 #Python
关于numpy中np.nonzero()函数用法的详解
Feb 07 #Python
Python脚本实现自动将数据库备份到 Dropbox
Feb 06 #Python
一张图带我们入门Python基础教程
Feb 05 #Python
You might like
PHP程序员常见的40个陋习,你中了几个?
2014/11/20 PHP
php封装的page分页类完整实例
2016/10/18 PHP
自动生成文章摘要的代码[JavaScript 版本]
2007/03/20 Javascript
ASP Json Parser修正版
2009/12/06 Javascript
extjs grid设置某列背景颜色和字体颜色的方法
2010/09/03 Javascript
javascript判断ie浏览器6/7版本加载不同样式表的实现代码
2011/12/26 Javascript
js实时获取系统当前时间实例代码
2013/06/28 Javascript
Javascript Web Slider 焦点图示例源码
2013/10/10 Javascript
js统计录入文本框中字符的个数并加以限制不超过多少
2014/05/23 Javascript
详解AngularJS过滤器的使用
2016/03/11 Javascript
js获取所有checkbox的值的简单实例
2016/05/30 Javascript
JS操作JSON方法总结(推荐)
2016/06/14 Javascript
HTML5 实现的一个俄罗斯方块实例代码
2016/09/19 Javascript
微信小程序获取微信运动步数的实例代码
2017/07/20 Javascript
zTree异步加载展开第一级节点的实现方法
2017/09/05 Javascript
jQuery+SpringMVC中的复选框选择与传值实例
2018/01/08 jQuery
vue嵌套路由与404重定向实现方法分析
2018/05/04 Javascript
AngularJS上传文件的示例代码
2018/11/10 Javascript
vue 实现setInterval 创建和销毁实例
2020/07/21 Javascript
推荐10款最受Python开发者欢迎的Python IDE
2018/09/16 Python
对Python3 解析html的几种操作方式小结
2019/02/16 Python
python下PyGame的下载与安装过程及遇到问题
2019/08/04 Python
Django认证系统user对象实现过程解析
2020/03/02 Python
如何在 Matplotlib 中更改绘图背景的实现
2020/11/26 Python
amazeui时间组件的实现示例
2020/08/18 HTML / CSS
公积金转移接收函
2014/01/11 职场文书
高中政治教学反思
2014/01/18 职场文书
2014社区三八妇女节活动总结
2014/03/01 职场文书
三方合作协议书范本
2014/04/18 职场文书
优质服务口号
2014/06/11 职场文书
2015年商场工作总结
2015/04/27 职场文书
2015年终个人政治思想工作总结
2015/11/24 职场文书
竞聘书的秘诀
2019/04/02 职场文书
工作违纪的检讨书范文
2019/07/09 职场文书
Mybatis是这样防止sql注入的
2021/12/06 Java/Android
MySQL中int (10) 和 int (11) 的区别
2022/01/22 MySQL