没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
L2cl~~整理 rilydb@126.com
转载 http://www.pythontik.com
什么是 Tkinter
本系列教程译自 Fredrik Lundh 的 An Introduction to Tkinter。
Tkinter(也叫 Tk 接口)是 Tk 图形用户界面工具包标准的 Python 接口。Tk 是一个轻量级的
跨平台图形用户界面( GUI)开发工具。Tk 和 Tkinter 可以运行在大多数的 Unix 平台、
Windows、和 Macintosh 系统。
Tkinter 由一定数量的模块组成。Tkinter 位于一个名为_tkinter(较早的版本名为 tkinter)的
二进制模块中 。Tkinter 包含了对 Tk 的低 级接口模块,低级接口并不会被应用级程序员直
接使用,通常是一个共享库(或 DLL),但是在一些情况下它也被 Python 解释器静态链
接。
除了 Tk 接口模块,Tkinter 也包含了一定数量的 Python 模块。其中两个最重要的模块是
Tkinter 本身和名为 Tkconstants 的模块。前者自动引导后者,因此使用 Tkinter,你首先需要
做的是导入 Tkinter 模块,
代码如下:
import Tkinter
或
from Tkinter import *
第一个 Tkinter 程序
一、代码如下:
# File: hello1.py
from Tkinter import *
root = Tk()
w = Label(root, text="Hello, world!")
w.pack()
root.mainloop()
运行结果如下:
关闭这个窗口即可终止这个程序的运行。
L2cl~~整理 rilydb@126.com
二、对代码的说明:
我们通过导入 Tkinter 模块开始。Tkinter 模块包含了用 Tk 工具包工作所需的所有的类,函
数和其它一些必须的东西。在大多数情况下,你只需要简单的从 Tkinter 导入所有的东西到
你的模块的名字空间,如下所示:
from Tkinter import *
然 后初始化 Tkinter,方法是我们必须先创建一个 Tk root(根)窗口部件,它是一个普通的
窗口,带有标题条和其它由你的窗口管理器供给的附属。你 应该只创建一个 root 窗口部件,
这个 root 窗口部件必须在其它窗口部件创建之前创建。初始化 Tkinter 的代码如下:
root = Tk()
接着我们创建一个 Label(标签)窗口部件作为这个 root 窗口的孩子,代码如下:
w = Label(root, text="Hello, world!")
Label 窗口部件可以显示文本、图标或图象。我们这里用 text 选项来指定要显示的文本。
接下来我们在 Label 窗口部件上调用了 pack 方法,它告诉 Label 窗口部件去调整自己的尺
寸来适应所给定文本的大小,并且使用自己可见,代码如下:
w.pack()
但是在这些发生之前,我们必须进入 Tkinter 的事件循环,代码如下:
root.mainloop()
这 个程序将一直处在事件循环之中,直到我们关闭了这个窗口。事件循环不仅仅处理来自
用户的事件(如鼠标敲击和按键按下)或者窗口系统(重绘事件和窗口配置消 息),它也
处理来自 Tkinter 自身的工作等待队列,这些工作之一就包括由 pack 方法所产生的工作和
显示更新。这就意味着这个应用程序窗口在进入这个 事件循环之前将不会显示出来。
第二个 Tkinter 程序
当我们在写一个较大的程序的时候,
把代码封装在类中通常是一个好的主意。
一、代码如下:
# File: hello2.py
from Tkinter import *
L2cl~~整理 rilydb@126.com
class App:
def __init__(self, master):
frame = Frame(master)
frame.pack()
self.button = Button(frame, text="QUIT", fg="red", command=frame.quit)
self.button.pack(side=LEFT)
self.hi_there = Button(frame, text="Hello", command=self.say_hi)
self.hi_there.pack(side=LEFT)
def say_hi(self):
print "hi there, everyone!"
root = Tk()
app = App(root)
root.mainloop()
运行结果如下:
如果你点击 Hello 按钮,将在控制台打印出"hi there, everyone!" 。如果你点击 QUIT 按钮,
程序将终止。
二、代码说明:
这个简单的应用程序被写成了一个类。这个构造器(__init__ 方法)通过一个父部件被调
用,并针对父部件增加了一些子部件。构造器通过创建一个 Frame(帧)窗口部件开始。
一个帧是一个简单的容器,在这个例子中,我们仅用来容纳另外的两个部件。
class App:
def __init__(self, master):
frame = Frame(master)
frame.pack()
这个帧实例被存储在一个名为 Frame 的局部变量中。在创建了这个部件后,我们立即调用
pack 方法来使用这个帧可见。
然后我们创建两个 Button(按钮)窗口部件作为这个帧的孩子。
self.button = Button(frame, text="QUIT", fg="red", command=frame.quit)
self.button.pack(side=LEFT)
L2cl~~整理 rilydb@126.com
self.hi_there = Button(frame, text="Hello", command=self.say_hi)
self.hi_there.pack(side=LEFT)
这次,我们传递了一定数量的选项给构造器。第一个按钮被标为"QUIT",字为红色(fg 是
foreground<前景色>的缩写)。第二个被标为"Hello"。两个按钮都有一个 command 选项。
这个选项指定了一个函数或方法,在按钮被点击时会被调用。
按 钮实例被存储在实例属性组中。side=LEFT 参数表示这两个按钮在帧中将被分开放置;
第一个按钮被放置在帧的左边缘,第二个被放在第一个的右边(帧 的左边缘仍保留着空
格)。默认情况下,部件的放置都是相对于它们的父亲(frame 部件相对于 master,button
相对于 frame)。如果 side 选项没指定,side 默认值为 TOP。
"Hello"按钮的回调函数如下所示,它在按钮每次被按下时简单地打印一条信息给控制台:
def say_hi(self):
print "hi there, everyone!"
最后我们提供了一些脚本级的代码来创建一个 Tk root 部件,和一个 App 类的实例(这个实
例使用这个 root 部件作为它的父亲):
root = Tk()
app = App(root)
root.mainloop()
root.mainloop()调用 root 部件的 mainloop 方法。它进入 Tk 事件循环,这个应用程序将处于
这个 Tk 事件循环之中直到 quit 方法被调用(点击 QUIT 按钮),或窗口被关闭。
关于窗口部件引用
在第二个例子中,frame 部件被存储在一个名为 frame 的局部变量中,而 button 部件则存储
在两个实例的属性组中。这是否隐藏着一个严重的问题呢:当 __init__ 函数返回并且 frame
变量超出了范围会发生什么呢?。
不 要紧;这儿确实没有必要去保持对窗口部件实例的引用。Tkinter 自动维护一个窗口部件
树(通过对象实例的 master 和 children 属性),因 此,当应用程序的最后一个引用消失时
窗口部件不会消失;窗口部件必须显示的用 destroy 方法销毁。但是如果你希望在窗口部件
被创建以后用它来做一些事 情,你最好保持对你自己的窗口部件实例的引用。
注意如果你不需要保持对一个窗口部件的引用,你可以用单独的一行来创建和 pack(包
装)它,如下:
Button(frame, text="Hello", command=self.hello).pack(side=LEFT)
L2cl~~整理 rilydb@126.com
不要存储这个操作的结果,当你试图去用这个结果时你会很失望(因为 pack 方法返回
None)。为小心起见,最好将将 pack(包装)分开,如下所示:
w = Button(frame, text="Hello", command=self.hello)
w.pack(side=LEFT)
关于窗口部件的名字
另 一个容量引起混淆的方面(尤其是使用 Tcl 编程 Tk 的有一些经验的人)是 Tinter 的窗口
部件的名字的概念。在 Tcl 中,你必须显示的命名每一个窗口部 件。例如下面的 Tcl 命令
创建一个名为 ok 的按钮作为名为 dialog 的窗口部件的孩子(dialog 又是 root 窗口的孩子):
button .dialog.ok
相应的 Tkinter 调用将如下:
ok = Button(dialog)
在 这个 Tkinter 案例中,ok 和 dialog 是对窗口部件实例的引用,不是窗口部件实际的名字。
因为 Tk 自身需要这些名字,Tkinter 自动为每个新 窗口部件赋一个唯一的名字。在这个
Tkinter 案例中,这个 dialog 的名字或许类似".1428748",并且 button 可能
是".1428748.1432920"。如果你希望得到一个 Tkinter 窗口部件的完整名字,你可以在这个
窗口部件实例上使用 str 函数:
>>> print str(ok)
.1428748.1432920
如果你确实需要为一个窗口部件指定一个名字,你可以在你创建这个窗口部件时使用 name
选项。你这么做的原因可能是你需要和用 Tcl 写的代码接口。
下面的例子将产生一个名为".dialog.ok"的窗口部件(如果你忘了命名 dialog,那么名字可能
类似".1428748.ok"):
ok = Button(dialog, name="ok")
为了避免与此同时 Tkinter 的名字机制相冲突,不要使用只包含数字的名字。同样注意
name 是只能创建一次的选项;一旦你创建了这个部件的名字,那么你就不能再改变它的名
字了。
Tkinter 类之窗口部件类
Tkinter 支持 15 个核心的窗口部件,这个 15 个核心窗口部件类列表如下:
剩余40页未读,继续阅读
资源评论
- beixiahuaideren2014-05-19很不错。。。中文的哦
- 媒体盒子2012-04-13不错,就是字迹看的不是很清楚,有点累
- home_dog2012-03-29很不错的书,只是字迹不清,看着有点累.
rilydb
- 粉丝: 0
- 资源: 1
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功