pythontkinter在一块区域中绘图_用Python中的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')
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))
九、显示图片
要用tkinter在画布上显示图片,首先要装入图片,然后使用canvas对象上的create_image函数。
这是我存在E盘上的一张图片:
我们可以这样来显示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指向装入的图片。
注:用tkinter只能装入GIF图片,也就是扩展名是.gif的图片文件。
想要显示其他类型的图片,如PNG和JPG,需要用到其他的模块,比如Python图像库。
十、创建基本的动画
创建一个填了色的三角形,让它在屏幕上横向移动:
importtimefrom 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行为:
importtimefrom 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(在结尾处加上这段代码)
importtimefrom 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会自动调用这个函数来处理事件。
例如,要让三角形在按下回车键时移动,我们可以定义这个函数:
defmovetriangle(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)defmovetriangle(event):
canvas.move(1,5,0)
canvas.bind_all('',movetringle) ##让tkinter监视KeyPress事件,当该事件发生时调用movetriangle函数
那么我们如何根据按键的不同而改变三角形的方向呢?比如用方向键。
我们可以尝试改下movetriangle函数:
defmovetriangle(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)elsecanvas.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)defmovetriangle(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('',movetriangle) ##让tkinter监视KeyPress事件,当该事件发生时调用movetriangle函数
canvas.bind_all('',movetriangle)
canvas.bind_all('',movetriangle)
canvas.bind_all('',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语言的优点,其最主要的就是易学,而且可以调用各种库。
pythontkinter在一块区域中绘图_用Python中的tkinter模块作图(续)相关推荐
- python中元组_理解python中的元组
理解 python 中的元组 引言 在 Python 中元组是这样的: 元组是是这样一种数据结构:不变的或者不可改变的(简单来说不能重新赋值) .元素的有序序列.因为元组是 不变的,所以他的数值是不能 ...
- python中面向对象_简述Python中的面向对象编程的概念
面向对象编程--Object Oriented Programming,简称OOP,是一种程序设计思想.OOP把对象作为程序的基本单元,一个对象包含了数据和操作数据的函数. 面向过程的程序设计把计算机 ...
- python中八进制_在Python中以八进制格式输入数字
python中八进制 Syntax to convert octal value to an integer (decimal format), 将八进制值转换为整数(十进制格式)的语法, int(o ...
- python中幂函数_解决python中的幂函数、指数函数问题
最近在调代码,碰到幂函数.指数函数,总是提示 ValueError: math domain error ValueError: negative number cannot be raised to ...
- python中index从列表中查_在Python中查找包含它的列表的项目的索引
>>> ["foo", "bar", "baz"].index("bar") 1 警告如下 请注意,虽 ...
- python写入csv文件中添加行_在python中为csv文件输出键添加值
这是我的输入csv文件. client_ip listener_service listener_port 127.0.0.1 LMNO 123 ::1 PQAR 768 ::1 PQAR 128 1 ...
- python字符串可以保存在变量中吗_在python中可以从字符串变量实例化类吗?
一位评论者提到 exec ;这是您将其组合在一起的方式: def string_to_class(python_text): local_vars = {} exec(python_text, {}, ...
- python中小数_比较python中的小数
你的措辞表明你想用货币计算,但要注意你的舍入误差.小数是一个很好的选择,因为它们在与其他小数进行加法.减法和乘法运算时会产生精确的结果. 奇怪的是,您的示例显示使用分数"1/3". ...
- python 中定义的函数 如何在main中调用_在python中,在定义类时自动运行函数的方法?_class_酷徒编程知识库...
类定义时初始化类属性,不需要函数.import numpy as np class Foo: bar = np.range(100) def __init__(self): # etc. 如果要在导入 ...
最新文章
- ORA-04063: view SYS.DBA_REGISTRY has errors
- 任务管理器进程中多个chrome.exe的问题
- js控制鼠标移动_原生JS封装可拖拽效果
- linux笔记之常用的基本命令
- java methodtype_java基于MethodHandle调用方法
- .net framework与java,分布式事务:.NET Framework与.NET Core
- LeetCode 1832. 判断句子是否为全字母句
- 计算机进入休眠状态后,Win7电脑进入休眠状态后又自动重启该怎么处理
- mybatis自学笔记-1
- steam (游戏平台)
- Roslyn入门(1):一个简单修改C#代码的例子
- Kubernetes如何被应用在华为
- App自动化测试 —— Appium的使用
- iphone4安装使用微信
- 带你掌握Visual Studio Code的格式化程序
- java上传刷新_用ajaxfileupload实现无刷新上传的代码示例
- PTA_2021年团体程序设计天梯赛_总决赛_L2-4 哲哲打游戏 (25 分)_搞心态_简单模拟
- Elasticsearch面试题(大数据面试)
- Already included file name xxx differs from file name xxx only in case.
- 【RMAN】RMAN脚本中使用替换变量
热门文章
- Go 1.4 正式版发布,官方正式支持 Android
- (翻译)为你的MVC应用程序创建自定义视图引擎
- sql server中的decimal或者numeric的精度问题 (转载)
- 如何查看超大文本文件
- ef mysql 时间_关于c#:EF6和MySQL时区支持
- 区块链BaaS云服务(14)华大BGI区块链“安全多方计算“
- Bitcoin 中的挖矿算法(4) 产生genesis区块
- 《研磨设计模式》chap20 享元模式 Flyweight (1)前奏介绍
- 区块链BaaS云服务(3)甲骨文 Oracle Blockchain Platform
- buu Windows系统密码