您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 项目/工程管理 > Tkinter经典教程
L2cl~~整理rilydb@126.comTkinter经典教程ContentsTkinter经典教程...............................................................................................................................................................1第一个Tkinter程序..........................................................................................................................................................2第二个Tkinter程序..........................................................................................................................................................3Button窗口部件................................................................................................................................................................8Mixins...............................................................................................................................................................................11边框.................................................................................................................................................................................19应用程序窗口.................................................................................................................................................................25确认数据.........................................................................................................................................................................42L2cl~~整理rilydb@126.com本系列教程译自FredrikLundh的AnIntroductiontoTkinter。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模块,代码如下:importTkinter或fromTkinterimport*第一个Tkinter程序一、代码如下:#File:hello1.pyfromTkinterimport*root=Tk()w=Label(root,text=Hello,world!)w.pack()root.mainloop()运行结果如下:关闭这个窗口即可终止这个程序的运行。二、对代码的说明:我们通过导入Tkinter模块开始。Tkinter模块包含了用Tk工具包工作所需的所有的类,函数和其它一些必须的东西。在大多数情况下,你只需要简单的从Tkinter导入所有的东西到你的模块的名字空间,如下所示:L2cl~~整理rilydb@126.comfromTkinterimport*然后初始化Tkinter,方法是我们必须先创建一个Tkroot(根)窗口部件,它是一个普通的窗口,带有标题条和其它由你的窗口管理器供给的附属。你应该只创建一个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.pyfromTkinterimport*classApp:def__init__(self,master):frame=Frame(master)frame.pack()L2cl~~整理rilydb@126.comself.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)defsay_hi(self):printhithere,everyone!root=Tk()app=App(root)root.mainloop()运行结果如下:如果你点击Hello按钮,将在控制台打印出hithere,everyone!。如果你点击QUIT按钮,程序将终止。二、代码说明:这个简单的应用程序被写成了一个类。这个构造器(__init__方法)通过一个父部件被调用,并针对父部件增加了一些子部件。构造器通过创建一个Frame(帧)窗口部件开始。一个帧是一个简单的容器,在这个例子中,我们仅用来容纳另外的两个部件。classApp: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)self.hi_there=Button(frame,text=Hello,command=self.say_hi)self.hi_there.pack(side=LEFT)这次,我们传递了一定数量的选项给构造器。第一个按钮被标为QUIT,字为红色(fg是foreground前景色的缩写)。第二个被标为Hello。两个按钮都有一个command选项。这个选项指定了一个函数或方法,在按钮被点击时会被调用。L2cl~~整理rilydb@126.com按钮实例被存储在实例属性组中。side=LEFT参数表示这两个按钮在帧中将被分开放置;第一个按钮被放置在帧的左边缘,第二个被放在第一个的右边(帧的左边缘仍保留着空格)。默认情况下,部件的放置都是相对于它们的父亲(frame部件相对于master,button相对于frame)。如果side选项没指定,side默认值为TOP。Hello按钮的回调函数如下所示,它在按钮每次被按下时简单地打印一条信息给控制台:defsay_hi(self):printhithere,everyone!最后我们提供了一些脚本级的代码来创建一个Tkroot部件,和一个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)不要存储这个操作的结果,当你试图去用这个结果时你会很失望(因为pack方法返回None)。为小心起见,最好将将pack(包装)分开,如下所示:w=Button(frame,text=Hello,command=self.hello)w.pack(side=LEFT)关于窗口部件的名字L2cl~~整理rilydb@126.com另一个容量引起混淆的方面(尤其是使用Tcl编程Tk的有一些经验的人)是Tinter的窗口部件的名字的概念。在Tcl中,你必须显示的命名每一个窗口部件。例如下面的Tcl命令创建一个名为ok的按钮作为名为dialog的窗口部件的孩子(dialog又是root窗口的孩子):button.dialog.ok相应的Tkinter调用将如下:ok=Button(dialog)在这个Tkinter
本文标题:Tkinter经典教程
链接地址:https://www.777doc.com/doc-4209792 .html