八、显示文字

用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模块作图(续)相关推荐

  1. python中元组_理解python中的元组

    理解 python 中的元组 引言 在 Python 中元组是这样的: 元组是是这样一种数据结构:不变的或者不可改变的(简单来说不能重新赋值) .元素的有序序列.因为元组是 不变的,所以他的数值是不能 ...

  2. python中面向对象_简述Python中的面向对象编程的概念

    面向对象编程--Object Oriented Programming,简称OOP,是一种程序设计思想.OOP把对象作为程序的基本单元,一个对象包含了数据和操作数据的函数. 面向过程的程序设计把计算机 ...

  3. python中八进制_在Python中以八进制格式输入数字

    python中八进制 Syntax to convert octal value to an integer (decimal format), 将八进制值转换为整数(十进制格式)的语法, int(o ...

  4. python中幂函数_解决python中的幂函数、指数函数问题

    最近在调代码,碰到幂函数.指数函数,总是提示 ValueError: math domain error ValueError: negative number cannot be raised to ...

  5. python中index从列表中查_在Python中查找包含它的列表的项目的索引

    >>> ["foo", "bar", "baz"].index("bar") 1 警告如下 请注意,虽 ...

  6. python写入csv文件中添加行_在python中为csv文件输出键添加值

    这是我的输入csv文件. client_ip listener_service listener_port 127.0.0.1 LMNO 123 ::1 PQAR 768 ::1 PQAR 128 1 ...

  7. python字符串可以保存在变量中吗_在python中可以从字符串变量实例化类吗?

    一位评论者提到 exec ;这是您将其组合在一起的方式: def string_to_class(python_text): local_vars = {} exec(python_text, {}, ...

  8. python中小数_比较python中的小数

    你的措辞表明你想用货币计算,但要注意你的舍入误差.小数是一个很好的选择,因为它们在与其他小数进行加法.减法和乘法运算时会产生精确的结果. 奇怪的是,您的示例显示使用分数"1/3". ...

  9. python 中定义的函数 如何在main中调用_在python中,在定义类时自动运行函数的方法?_class_酷徒编程知识库...

    类定义时初始化类属性,不需要函数.import numpy as np class Foo: bar = np.range(100) def __init__(self): # etc. 如果要在导入 ...

最新文章

  1. ORA-04063: view SYS.DBA_REGISTRY has errors
  2. 任务管理器进程中多个chrome.exe的问题
  3. js控制鼠标移动_原生JS封装可拖拽效果
  4. linux笔记之常用的基本命令
  5. java methodtype_java基于MethodHandle调用方法
  6. .net framework与java,分布式事务:.NET Framework与.NET Core
  7. LeetCode 1832. 判断句子是否为全字母句
  8. 计算机进入休眠状态后,Win7电脑进入休眠状态后又自动重启该怎么处理
  9. mybatis自学笔记-1
  10. steam (游戏平台)
  11. Roslyn入门(1):一个简单修改C#代码的例子
  12. Kubernetes如何被应用在华为
  13. App自动化测试 —— Appium的使用
  14. iphone4安装使用微信
  15. 带你掌握Visual Studio Code的格式化程序
  16. java上传刷新_用ajaxfileupload实现无刷新上传的代码示例
  17. PTA_2021年团体程序设计天梯赛_总决赛_L2-4 哲哲打游戏 (25 分)_搞心态_简单模拟
  18. Elasticsearch面试题(大数据面试)
  19. Already included file name xxx differs from file name xxx only in case.
  20. 【RMAN】RMAN脚本中使用替换变量

热门文章

  1. Go 1.4 正式版发布,官方正式支持 Android
  2. (翻译)为你的MVC应用程序创建自定义视图引擎
  3. sql server中的decimal或者numeric的精度问题 (转载)
  4. 如何查看超大文本文件
  5. ef mysql 时间_关于c#:EF6和MySQL时区支持
  6. 区块链BaaS云服务(14)华大BGI区块链“安全多方计算“
  7. Bitcoin 中的挖矿算法(4) 产生genesis区块
  8. 《研磨设计模式》chap20 享元模式 Flyweight (1)前奏介绍
  9. 区块链BaaS云服务(3)甲骨文 Oracle Blockchain Platform
  10. buu Windows系统密码