用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图像库。

十、创建基本的动画

创建一个填了色的三角形,让它在屏幕上横向移动:

import time
from 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 time
from 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 time
from 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‘) 

总结

  1. 做出了简单的动画。
  2. 学会了如何用事件绑定来让图形响应按键,这在写计算机游戏时很有用。
  3. 在tkinter中以create开头的函数是如何返回一个ID数字。

已经学习Python两天,最开始是想着是通过觉得用它写个动画或者画个图形比较方便,而且界面美观,比黑洞洞的dos窗口好多了,准备写个程序送个一女孩作为生日礼物(去年答应好的)。经过这两天的学习,我慢慢发觉了Python语言的优点,其最主要的就是易学,而且可以调用各种库。

我相信我与Python的相遇才只是刚开始,后面的路还很长很长。

时间: 2024-08-26 19:44:30

用Python中的tkinter模块作图(续)的相关文章

python中的Tkinter模块

Tkinter模块("Tk 接口")是Python的标准Tk GUI工具包的接口.Tk和Tkinter可以在大多数的Unix平台下使用,同样可以应用在Windows和Macintosh系统里.Tk8.0的后续版本可以实现本地窗口风格,并良好地运行在绝大多数平台中. 目录: 1.简单实例2.Label控件3.Button控件4.Entry控件5.点击按钮输出输入框中的内容6.Text控件7.带滚动条的Text8.Checkbutton多选框控件9.Radiobutton单选框10.Lis

Python中利用tkinter模块构建图形用户界面GUI

1 >>> from tkinter import *; 2 >>> root=Tk() 3 >>> myLabel=Label(root,text="Hello world!"); 4 >>> myLabel.grid() 5 >>> root.mainloop() 先使用from tkinter import *;导入tkinter模块,输入上面的代码,出项GUI界面如上:

Python中的random模块,来自于Capricorn的实验室

Python中的random模块用于生成随机数.下面介绍一下random模块中最常用的几个函数. random.random random.random()用于生成一个0到1的随机符点数: 0 <= n < 1.0 random.uniform random.uniform的函数原型为:random.uniform(a, b),用于生成一个指定范围内的随机符点数,两个参数其中一个是上限,一个是下限.如果a > b,则生成的随机数n: a <= n <= b.如果 a <

python中查看可用模块

1.这种方式的问题是,只列出当前import进上下文的模块. 进入python命令行.输入以下代码: >>>import sys >>>sys.modules 2.在python命令行下输入: >>>help() help>modulespython中查看可用模块,布布扣,bubuko.com

python中动态导入模块

如果导入的模块不存在,Python解释器会报 ImportError 错误: >>> import something Traceback (most recent call last): File "<stdin>", line 1, in <module> ImportError: No module named something 有的时候,两个不同的模块提供了相同的功能,比如 StringIO 和 cStringIO 都提供了Strin

Python中的random模块

Python中的random模块 (转载自http://www.cnblogs.com/yd1227/archive/2011/03/18/1988015.html) Python中的random模块用于生成随机数.下面介绍一下random模块中最常用的几个函数. random.random random.random()用于生成一个0到1的随机符点数: 0 <= n < 1.0 random.uniform random.uniform的函数原型为:random.uniform(a, b),

解决linux系统下python中的matplotlib模块内的pyplot输出图片不能显示中文的问题

问题: 我在ubuntu14.04下用python中的matplotlib模块内的pyplot输出图片不能显示中文,怎么解决呢? 解决: 1.指定默认编码为UTF-8: 在python代码开头加入如下代码 import sys reload(sys) sys.setdefaultencoding('utf-8') 2.确认你ubuntu系统环境下拥有的中文字体文件: 在终端运行命令"fc-list :lang=zh",得到自己系统的中文字体 命令输出如下: /usr/share/fon

(转)Python中的random模块

Python中的random模块用于生成随机数.下面介绍一下random模块中最常用的几个函数. random.random random.random()用于生成一个0到1的随机符点数: 0 <= n < 1.0 random.uniform random.uniform的函数原型为:random.uniform(a, b),用于生成一个指定范围内的随机符点数,两个参数其中一个是上限,一个是下限.如果a > b,则生成的随机数n: a <= n <= b.如果 a <

转载:python中的copy模块(浅复制和深复制)

主要是介绍python中的copy模块. copy模块包括创建复合对象(包括列表.元组.字典和用户定义对象的实例)的深浅复制的函数. ########copy(x)########创建新的复合对象并通过引用复制x的成员来创建x的浅复制.更加深层次说,它复制了对象,但对于对象中的元素,依然使用引用.对于内置类型,此函数并不经常使用.而是使用诸如list(x), dict(x), set(x)等调用方式来创建x的浅复制,要知道像这样直接使用类型名显然比使用copy()快很多.但是它们达到的效果是一样