Tkinter教程
这系列教程完全以代码的形式来写的,目标是:读者看代码和注释就可以理解代码的意思。但这里的读者需要具备的几项技能:
? 熟悉python语言的基础,如果还没有,先看一下python的教程吧,英文官方(http://docs.python.org/tut/tut.html); ? 对界面编程有一定的了解,知道基本的概念就可以了;
? 对Tk有兴趣,别以为她是已经过时的技术,如果丧失了学习的兴趣,那肯定无法完成了;
? 不要以Ctrl+C/Ctrl+V的方式使用本教程(虽然它可以这样直接运行),自己输入,你会发现自己原来也会犯这样的错误;
? 安装了python2.5且确认安装了Tkinter模块(默认就安装了,如果你没有强制的把它去掉的话),下载python2.5(http://www.python.org/download/); ? 如果在阅读教程中有不明白的,不要强迫自己,直接跳过去,继续下一个内容。 Tkinter教程系列教程的特点:
? 他不是一本经过文字润色的文章,全部是代码,作者在必要的时候使用注释来解释; ? 以组件为章节进行介绍,每个组件又分为不同的例子,各个例子可以单独使用,分别使用序号标注;
? 各个例子的使用“注释+序号”的格式表示开始,下一个例子的开始为上一个例子的结束;
?? 全部使用结构化编程(SP),没有面向对象的概念(OO);
?? 基本上包含了TKinter的所有的控件,根据每个控件的使用方法,选择性的介绍了其属性和方法,没有全部介绍,全部的介绍查看Tkinter的官方参考(http://www.pythonware.com/library/tkinter/introduction/);
?? 例子不是百分百的完美,甚至有的例子没有按照Tkinter参考的描述完成,原因由于作者没有看懂:( ?? 参考书籍:http://www.pythonware.com/library/tkinter/introduction/,如有冲突以Tkinter参考为准
最后祝各位Tk一路快乐!
Label
#Tkinter教程之Label篇 '''1.Label的第一个例子 text属性使用方法 '''
#要使用Tk模块,除非你不想使用这个模块,那整个教程就不需要看了 from Tkinter import * #初始化Tk root = Tk()
#创建一个label,使用编码,到现在为止还没有使用过直接通过“drag-and-drop”就可以完成的IDE。
label = Label(root,text = 'Hello Tkinter') #显示label,必须含有此语句 label.pack() #root.pack()
#但root是不需要(严格地说是必须不这样使用),否则解释器抱怨 #进入消息循环 root.mainloop() #控件的显示步骤: #1.创建这个控件
#2.指定这个空间的master,即这个控件属于哪一个 #3.告诉GM(geometry manager)有一个控件产生了 '''
还有更简单的一个例子:将‘Hello Tkinter’打印到标题上,Label也不用创建了 from Tkinter import * root = Tk()
root.title('hello Tkinter') root.mainloop()
再没法儿简化了,就这样吧 '''
'''2.在label上使用内置位图 bitmap的使用方法 '''
from Tkinter import * #初始化Tk root = Tk()
#创建一个label,使用编码,到现在为止还没有使用过直接通过“drag-and-drop”就可以完成的IDE。
label = Label(root,bitmap = 'error') #上面的代码使用了内置位图error
#显示label,必须含有此语句 label.pack()
#进入消息循环 root.mainloop() '''
其他可用的位图: * error * hourglass * info
* questhead * question * warning * gray12 * gray25 * gray50 * gray75
若要查看各自的效果,可以使用相应的名称将bitmpa = 'error'替换。 据说还可以使用自己指定的位图文件,网上找了一下,格式如下: Label(root, bitmap=\
不过我试了一下,从来没有成功过,我已经将位图该为单色的了:(
另:还有的网上的文章说明如何使用PhotoImage和BitmapImage显示bmp或gif文件,提到一点
防止图像文件被python自动回收(garbage collected),应将bmp或gif放到全局(global)或实体
(instance)中,使用如下两种方法,仍未奏效: '''
#使用image属性
# bm = PhotoImage(file = 'c:\\\\python.gif') # label = Label(root,image = bm) # label.bm = bm #错误信息:
#TclError: image \ doesn't exist #使用bitmap属性
# bm = BitmapImage(file='c:\\\\python2.bmp') # label = Label(root,bitmap=bm) # label.bm = bm # label.pack() #错误信息:
#TclError: format error in bitmap data '''
虽然二者均没有起作用,还是要说明一下,bitmap与image的关系,如果同时指定这两参数,image
优先。 '''
'''3.改变控件的前景色和背景色 fg:前景色 bg:背景色
设置背景色的一个大的用处是:可以判断控件的大小(不同的控件使用不同的颜色,后续内容
可以使用此特性来调试container) '''
from Tkinter import * root = Tk()
#在创建Label时指定各自使用的颜色 '''可以使用的颜色值:''' #使用颜色名称
Label(root,fg = 'red',bg = 'blue',text = 'Hello I am Tkinter').pack() #使用颜色值#RRGGBB
Label(root,fg = 'red',bg = '#FF00FF',text = 'Hello I am Tkinter').pack() #使用系统相关的颜色值(Windows),不建议使用这样的值,不利于平台移植 Label(root,fg = 'red',bg = 'SystemButtonShadow',text = 'Hello I am Tkinter').pack() root.mainloop() '''
(1).使用颜色名称 Red Green Blue Yellow LightBlue ......
(2).使用#RRGGBB
label = Label(root,fg = 'red',bg = '#FF00FF',text = 'Hello I am Tkinter') 指定背景色为绯红色
(3).除此之外,Tk还支持与OS相关的颜色值,如Windows支持 SystemActiveBorder, SystemActiveCaption, SystemAppWorkspace, SystemBackground, ...... '''
'''4.设置宽度与高度 width: 宽度 height: 高度 '''
from Tkinter import * root = Tk()
#创建三个Label,分别显示red,blue,yellow
#注意三个Label的大小,它们均与文本的长度有关 Label(root,text = 'red',bg = 'red').pack() Label(root,text = 'blue',bg = 'blue').pack() Label(root,text = 'yellow',bg = 'yellow').pack()
#再创建三个Label,与上次不同的是这三个Label均使用width和heigth属性 #三个Label的大小由width和height指定
Label(root,bg = 'red',width = 10,height = 3).pack() Label(root,bg = 'blue',width = 10,height = 3).pack() Label(root,bg = 'yellow',width = 10,height = 3).pack() root.mainloop()
'''5.同时使用图像与文本
compound: 指定文本(text)与图像(bitmap/image)是如何在Label上显示,缺省为None, 当指定image/bitmap时,文本(text)将被覆盖,只显示图像了。可以使用的值: left: 图像居左 right: 图像居右 top: 图像居上 bottom:图像居下
center:文字覆盖在图像上 bitmap/image:
显示在Label上的图像 text:
显示在Label上的文本
label = Label(root,text = 'Error',compound = 'left',bitmap = 'error') '''
from Tkinter import * root = Tk()
#演示compound的使用方法 #图像与文本在Label中的位置 #图像居下
Label(root,text = 'botton',compound = 'bottom',bitmap = 'error').pack() #图像居上
Label(root,text = 'top',compound = 'top',bitmap = 'error').pack() #图像居右
Label(root,text = 'right',compound = 'right',bitmap = 'error').pack() #图像居左
Label(root,text = 'left',compound = 'left',bitmap = 'error').pack() #文字覆盖在图像上
Label(root,text = 'center',compound = 'center',bitmap = 'error').pack()
#消息循环
root.mainloop()