使用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对切片命名的实现方法
Oct 16 Python
Python文件打开方式实例详解【a、a+、r+、w+区别】
Mar 30 Python
python-pyinstaller、打包后获取路径的实例
Jun 10 Python
Django生成PDF文档显示在网页上以及解决PDF中文显示乱码的问题
Jul 04 Python
Django中URL的参数传递的实现
Aug 04 Python
如何通过Django使用本地css/js文件
Jan 20 Python
Python栈的实现方法示例【列表、单链表】
Feb 22 Python
Python OrderedDict字典排序方法详解
May 21 Python
通过python-pptx模块操作ppt文件的方法
Dec 26 Python
Python 利用argparse模块实现脚本命令行参数解析
Dec 28 Python
全网最细 Python 格式化输出用法讲解(推荐)
Jan 18 Python
浅谈Python中的函数(def)及参数传递操作
May 25 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 之 没有mysql支持时的替代方案
2006/10/09 PHP
php中的时间显示
2007/01/18 PHP
php adodb操作mysql数据库
2009/03/19 PHP
关于访问控制的一首PHP面试题(对属性或方法的访问控制)
2012/09/13 PHP
php中使用gd库实现远程图片下载实例
2015/05/12 PHP
JavaScript 入门基础知识 想学习js的朋友可以参考下
2009/12/26 Javascript
javascript循环变量注册dom事件 之强大的闭包
2010/09/08 Javascript
jquery ajax的success回调函数中实现按钮置灰倒计时
2013/11/19 Javascript
jQuery实现简单隔行变色的方法
2016/02/20 Javascript
BootStrap网页中代码显示用法详解
2016/10/21 Javascript
javascript history对象详解
2017/02/09 Javascript
微信小程序利用co处理异步流程的方法教程
2017/05/20 Javascript
微信小程序switch开关选择器使用详解
2018/01/31 Javascript
Vue实现table上下移动功能示例
2019/02/21 Javascript
jquery.validate自定义验证用法实例分析【成功提示与择要提示】
2020/06/06 jQuery
jQuery实现可以计算进制转换的计算器
2020/10/19 jQuery
python编写网页爬虫脚本并实现APScheduler调度
2014/07/28 Python
Python入门_学会创建并调用函数的方法
2017/05/16 Python
Python实现导出数据生成excel报表的方法示例
2017/07/12 Python
python使用Tesseract库识别验证
2018/03/21 Python
Python面向对象之类和实例用法分析
2019/06/08 Python
Python Django 实现简单注册功能过程详解
2019/07/29 Python
详解pandas使用drop_duplicates去除DataFrame重复项参数
2019/08/01 Python
Python版中国省市经纬度
2020/02/11 Python
python随机模块random使用方法详解
2020/02/14 Python
浅谈pymysql查询语句中带有in时传递参数的问题
2020/06/05 Python
CSS Grid布局教程之什么是网格布局
2014/12/30 HTML / CSS
html5视频媒体标签video的使用方法及完整参数说明详解
2019/09/27 HTML / CSS
面向中国市场的在线海淘美妆零售网站:Beauty House美丽屋
2021/03/02 全球购物
婚礼证婚人证婚词
2014/01/08 职场文书
幼儿园中班下学期评语
2014/04/18 职场文书
教师年度考核评语
2014/04/28 职场文书
地球一小时宣传标语
2014/06/24 职场文书
国际贸易实训总结
2015/08/03 职场文书
vue组件的路由高亮问题解决方法
2021/05/11 Vue.js
MySQL表字段时间设置默认值
2021/05/13 MySQL