首页 Tkinter基本入门文字教程(详细介绍Tkinter各项例程)

Tkinter基本入门文字教程(详细介绍Tkinter各项例程)

举报
开通vip

Tkinter基本入门文字教程(详细介绍Tkinter各项例程)什么是Tkinter 什么是Tkinter Tkinter(也叫Tk接口)是Tk图形用户界面工具包标准的Python接口。Tk是一个轻量级的跨平台图形用户界面(GUI)开发工具。Tk和Tkinter可以运行在大多数的Unix平台、Windows、和Macintosh系统。 Tkinter 由一定数量的模块组成。Tkinter位于一个名为_tkinter(较早的版本名为tkinter)的二进制模块中 。Tkinter包含了对Tk的低 级接口模块,低级接口并不会被应用级程序员直接使用,通常是一个共享库(或DLL),但是...

Tkinter基本入门文字教程(详细介绍Tkinter各项例程)
什么是Tkinter 什么是Tkinter Tkinter(也叫Tk接口)是Tk图形用户界面工具包 标准 excel标准偏差excel标准偏差函数exl标准差函数国标检验抽样标准表免费下载红头文件格式标准下载 的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() 运行结果如下: 关闭这个窗口即可终止这个程序的运行。 二、对代码的说明: 我们通过导入Tkinter模块开始。Tkinter模块包含了用Tk工具包工作所需的所有的类,函数和其它一些必须的东西。在大多数情况下,你只需要简单的从Tkinter导入所有的东西到你的模块的名字空间,如下所示: from Tkinter import * 然 后初始化Tkinter,方法是我们必须先创建一个Tk root(根)窗口部件,它是一个普通的窗口,带有标题条和其它由你的窗口管理器供给的附属。你 应该只创建一个root窗口部件,这个root窗口部件必须在其它窗口部件创建之前创建。初始化Tkinter的代码如下: root = Tk() 接着我们创建一个Label(标签)窗口部件作为这个root窗口的孩子,代码如下: w = Label(root, text=" http://www.bboby.com !") Label窗口部件可以显示文本、图标或图象。我们这里用text选项来指定要显示的文本。 接下来我们在Label窗口部件上调用了pack方法,它告诉Label窗口部件去调整自己的尺寸来适应所给定文本的大小,并且使用自己可见,代码如下: w.pack() 但是在这些发生之前,我们必须进入Tkinter的事件循环,代码如下: root.mainloop() 这 个程序将一直处在事件循环之中,直到我们关闭了这个窗口。事件循环不仅仅处理来自用户的事件(如鼠标敲击和按键按下)或者窗口系统(重绘事件和窗口配置消 息),它也处理来自Tkinter自身的工作等待队列,这些工作之一就包括由pack方法所产生的工作和显示更新。这就意味着这个应用程序窗口在进入这个 事件循环之前将不会显示出来。 第二个Tkinter程序 当我们在写一个较大的程序的时候,把代码封装在类中通常是一个好的主意。 一、代码如下: # File: hello2.py from Tkinter import * 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= http://www.bboby.com 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) 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) 不要存储这个操作的结果,当你试图去用这个结果时你会很失望(因为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个核心窗口部件类列表如下: 窗口部件及说明: Button: 一个简单的按钮,用来执行一个命令或别的操作。 Canvas: 组织图形。这个部件可以用来绘制图表和图,创建图形编辑器,实现定制窗口部件。 Checkbutton: 代表一个变量,它有两个不同的值。点击这个按钮将会在这两个值间切换。 Entry: 文本输入域。 Frame: 一个容器窗口部件。帧可以有边框和背景,当创建一个应用程序或dialog(对话)版面时,帧被用来组织其它的窗口部件。 Label: 显示一个文本或图象。 Listbox: 显示供选 方案 气瓶 现场处置方案 .pdf气瓶 现场处置方案 .doc见习基地管理方案.doc关于群访事件的化解方案建筑工地扬尘治理专项方案下载 的一个列表。listbox能够被配置来得到radiobutton或checklist的行为。 Menu: 菜单条。用来实现下拉和弹出式菜单。 Menubutton: 菜单按钮。用来实现下拉式菜单。 Message: 显示一文本。类似label窗口部件,但是能够自动地调整文本到给定的宽度或比率。 Radiobutton: 代表一个变量,它可以有多个值中的一个。点击它将为这个变量设置值,并且清除与这同一变量相关的其它radiobutton。 Scale: 允许你通过滑块来设置一数字值。 Scrollbar: 为配合使用canvas, entry, listbox, and text窗口部件的标准滚动条。 Text: 格式化文本显示。允许你用不同的样式和属性来显示和编辑文本。同时支持内嵌图象和窗口。 Toplevel: 一个容器窗口部件,作为一个单独的、最上面的窗口显示。 注意在Tkinter中窗口部件类没有分级;所有的窗口部件类在树中都是兄弟。 所有这些窗口部件提供了Misc和几何管理方法、配置管理方法和部件自己定义的另外的方法。此外,Toplevel类也提供窗口管理接口。这意味一个典型的窗口部件类提供了大约150种方法。 Button窗口部件 Button(按钮)窗口部件是一个标准的Tkinter窗口部件,用来实现各种按钮。按钮能够包含文本或图象,并且你能够将按钮与一个Python函数或方法相关联。当这个按钮被按下时,Tkinter自动调用相关联的函数或方法。 按钮仅能显示一种字体,但是这个文本可以跨行。另外,这个文本中的一个字母可以有下划线,例如标明一个快捷键。默认情况,Tab键用于将焦点移动到一个按钮部件。 一、那么什么时候用按钮部件呢? 简而言之,按钮部件用来让用户说“马上给我执行这个任务”,通常我们用显示在按钮上的文本或图象来提示。按钮通常用在工具条中或应用程序窗口中,并且用来接收或忽略输入在对话框中的数据。 关于按钮和输入的数据的配合,可以参看Checkbutton和Radiobutton部件。 二、样式 普通的按钮很容易被创建,仅仅指定按钮的内容(文本、位图、图象)和一个当按钮被按下时的回调函数即可: b = Button(master, text="OK", command=self.ok) 没有回调函数的按钮是没有用的,当你按下这个按钮时它什么也不做。你可能在开发一个应用程序的时候想实现这种按钮,比如为了不干扰你的beta版的测试者: b = Button(master, text="Help", state=DISABLED) 如 果你没有指定尺寸,按钮的大小将正好能够容纳它的内容。你可以用padx和pady选项来增加内容与按钮边框的间距。你也可以用height和width 选项来显式地设置按钮的尺寸。如果你在按钮中显示文本,那么这些选项将以文本的单位为定义按钮的尺寸。如果你替而代之显示图象,那么按钮的尺寸将是象素 (或其它的屏幕单位)。你实际上甚至能够用象素单位来定义文本按钮的尺寸,但这可能带来意外的结果。下面是指定尺寸的一段例子代码: f = Frame(master, height=32, width=32) f.pack_propagate( http://www.bboby.com ) # don't shrink b = Button(f, text="Sure!") b.pack(fill=BOTH, expand=1) 按钮能够显示多行文本(但只能用一种字体)。 你可以使用多行或wraplength选项来使按钮自己调整文本。当调整文本时,使用anchor,justify,也可加上padx选项来得到你所希望的格式。一个例子如下: b = Button(master, text=longtext, anchor=W, justify=LEFT, padx=2) 为了使一个普通的按钮看起来像凹入的,例如你想去实现某种类型的工具框,你可简单地将relief的值从"RAISED"改变为"SUNKEN: b.config(relief=SUNKEN) 你也可能想改变背景。注意:一个大概更好的解决方案是使用一个Checkbutton或Radiobutton其indicatoron选项的值设置为false: b = Checkbutton(master, image=bold, variable=var, indicatoron=0) 三、方法 Button窗口部件支持标准的Tkinter窗口部件接口,加上下面的方法: flash():频繁重画按钮,使其在活动和普通样式下切换。 invoke() :调用与按钮相关联的命令。 下面的方法与你实现自己的按钮绑定有关: tkButtonDown(), tkButtonEnter(), tkButtonInvoke(), tkButtonLeave(), tkButtonUp() 这些方法可以用在定制事件绑定中,所有这些方法接收0个或多个形参。 四、选项 Button窗口部件支持下面的选项: activebackground, activeforeground 类型:颜色; 说明:当按钮被激活时所使用的颜色。 anchor 类型:常量; 说明:控制按钮上内容的位置。使用N, NE, E, SE, S, SW, W, NW, or CENTER这些值之一。默认值是CENTER。 background (bg), foreground (fg) 类型:颜色; 说明:按钮的颜色。默认值与特定平台相关。 bitmap 类型:位图; 说 明:显示在窗口部件中的位图。如果image选项被指定了,则这个选项被忽略。下面的位图在所有平台上都有 效:error, gray75, gray50, gray25, gray12, hourglass, info, questhead, question, 和 warning. 这 后面附加的位图仅在Macintosh上有 效:document, stationery, edition, application, accessory, folder, pfolder, trash, floppy, ramdisk, cdrom, preferences, querydoc, stop, note, 和 caution. 你也可以从一个XBM文件中装载位图。只需要在XBM文件名前加一个前缀@,例如"@sample.xbm"。 borderwidth (bd) 类型:整数; 说明:按钮边框的宽度。默认值与特定平台相关。但通常是1或2象素。 command 类型:回调; 说明:当按钮被按下时所调用的一个函数或方法。所回调的可以是一个函数、方法或别的可调用的Python对象。 cursor 类型:光标; 说明:当鼠标移动到按钮上时所显示的光标。 default 类型:常量; 说明:如果设置了,则按钮为默认按钮。注意这个语法在Tk 8.0b2中已改变。 disabledforeground 类型:颜色; 说明:当按钮无效时的颜色。 font 类型:字体; 说明:按钮所使用的字体。按钮只能包含一种字体的文本。 highlightbackground, highlightcolor 类型:颜色; 说明:控制焦点所在的高亮边框的颜色。当窗口部件获得焦点的时候,边框为highlightcolor所指定的颜色。否则边框为highlightbackground所指定的颜色。默认值由系统所定。 highlightthickness 类型:距离; 说明:控制焦点所在的高亮边框的宽度。默认值通常是1或2象素。 image 类型:图象; 说明:在部件中显示的图象。如果指定,则text和bitmap选项将被忽略。 justify 类型:常量; 说明:定义多行文本如何对齐。可取值有:LEFT, RIGHT, 或 CENTER。 padx, pady 类型:距离; 说明:指定文本或图象与按钮边框的间距。 relief 类型:常量; 说明:边框的装饰。通常按钮按下时是凹陷的,否则凸起。另外的可能取值有GROOVE, RIDGE, 和 FLAT。 state 类型:常量; 说明:按钮的状态:NORMAL, ACTIVE 或 DISABLED。默认值为NORMAL。 takefocus 类型:标志; 说明:表明用户可以Tab键来将焦点移到这个按钮上。默认值是一个空字符串,意思是如果按钮有按键绑定的话,它可以通过所绑定的按键来获得焦点。 text 类型:字符串; 说明:显示在按钮中的文本。文本可以是多行。如果bitmaps或image选项被使用,则text选项被忽略。 textvariable 类型:变量; 说明:与按钮相关的Tk变量(通常是一个字符串变量)。如果这个变量的值改变,那么按钮上的文本相应更新。 underline 类型:整数; 说明:在文本标签中哪个字符加下划线。默认值为-1,意思是没有字符加下划线。 width, height 类型:距离; 说明:按钮的尺寸。如果按钮显示文本,尺寸使用文本的单位。如果按钮显示图象,尺寸以象素为单位(或屏幕的单位)。如果尺寸没指定,它将根据按钮的内容来计算。 wraplength 类型:距离; 说明:确定一个按钮的文本何时调整为多行。它以屏幕的单位为单位。默认不调整。 Mixins Tkinter模块提供了相应于Tk中的各种窗口部件类型的类和一定数量的mixin和别的帮助类(mixin是一个类,被设计来使用多态继承与其它的类结合)。当你使用Tkinter时,你不将直接访问mixin类。 一、实施mixins 通过root窗口和窗口部件类,Misc类被用作mixin。它提供了大量的Tk和窗口相关服务,这些服务对所有Tkinter核心窗口部件者有效。这些通过委托完成;窗口部件仅仅直接请求适当的内部对象。 Wm类通过root窗口和顶级窗口部件类被用作mixin。通过委托它提供了窗口管理服务。 使用委托像这样简化你的应用程序代码:一旦你有一窗口部件,你能够使用这个窗口部件的实例的方法访问Tkinter的所有部份。 二、Geometry(几何学)与mixins Grid,Pack,Place这些类通过窗口部件类被用作mixins。通过委托,它们也提供了访问不同几何管理的支持。 下面是Geometry Mixins的列表及说明: 管理器及说明: Grid:grid几何管理器允许你通过在一个二维网格中组织窗口部件来创建一个类似表的版面。 Pack:pack几何管理器通过在一个帧中把窗口部件包装到一个父部件中来创建一个版面。为了对窗口部件使用这个几何管理器,我们在这个窗口部件上使用pack方法来集成。 Place:place几何管理器让你显式将一个窗口部件放到给定的位置。要使用这个几何管理器,需使用place方法。 三、窗口部件配置管理 Widget类使用 geometry mixins来混合Misc类,并通过cget和configure方法来增加配置管理,也可以通过一个局部的字典接口。 窗口部件的配置 要配置一个窗口部件的外观,你用选项比使用方法调用好。典型的选项包括text、color、size、command等等。对于处理选项,所有的核心窗口部件执行同样的配置接口: 配置接口 widgetclass(master, option=value, ...) => widget 说明: 创 建这个窗口部件的一个实例,这个实例作为给定的master的孩子,并且使用给定的选项。所有的选项都有默认值,因此在简单的情况下,你仅需要指定这个 master。如果你想的话,你也可以不指定master;Tkinter这时会使用最近创建的root窗口作为master。注意这个name选项仅能 在窗口部件被创建时设置。 cget(option) => string 说明: 返回一个选项的当前值。选项的名字和返回值都是字符串。要得到name选项,使用str(widget)代替。 configure(option=value, ...), config(option=value, ...) 说明: 设置一个或多个选项(作为关键字参数给定)。 注意一些选项的名字与Python中的保留字相同(class,from等)。要使用这些作为关键字参数,仅需要在这些选项名后添加一下划线(class_,from_)。注意你不能用此方法来设置name选项;name选项只能在窗口部件被创建时设置。 为了方便起见,窗口部件也实现一个局部的字典接口。 __setitem__ 方法映射configure,而__getitem__方法映射cget。你可以使用下面的语法来设置和查询选项: value = widget[ http://www.bboby.com ] widget[option] = value 注意每个赋值都导致一个对Tk的调用。如果你希望去改变多个选项,单独地调用(config或configure)去改变它们是一个好的主意。 这下面的字典方法也适用于窗口部件: keys() => list 说明: 返回窗口部件中所有可以被设置的选项的一个列表。name选项不包括在这个列表中(它不能通过字典接口被查询或修改)。 向后兼容性 关键字参数在Python1.3时被引入。之前,使用原始的Python字典将选项传递给窗口构造器和configure方法。原代码类似如下: self.button = Button(frame, {"text": "QUIT", "fg": "red", "command": frame.quit}) self.button.pack({"side": LEFT}) 关键字参数语法更优雅和少容易发生错误。但是为了与存在的代码兼容,Tkinter仍支持老的语法。在新的程序中你不应再用老的语法,即使是在某些情况下是很有吸引力的。例如,如果你创建了一个定制的窗口部件,它需要沿它的父类传递配置选项,你的代码可能如下: def __init__(self, master, **kw): Canvas.__init__(self, master, kw) # kw 是一个字典 上面的代码在当前版本的Tkinter下工作的很好,但是它在将来的版本下可能不工作。一个通常的办法是使用apply函数: def __init__(self, master, **kw): apply(Canvas.__init__, (self, master), kw) 这个apply函数使用了一个函数(一个未约束的方法),一个带参数的元组(它必须包括self,因为我们调用一个未约束的方法),一个可选的,提供了关键字参数的字典。 窗口部件的样式之颜色 所有的Tkinter标准窗口部件提供了一套样式设置选项,这让你可以去修改这些窗口部件的外观如颜色、字体和其它的可视外观。 颜色 大部份窗口部件都允许你指定窗口部件和文本的颜色,这可以使用background和foreground选项。要指定颜色,你可以使用颜色名,也可以使用红、绿、蓝颜色组合。 1、颜色名 Tkinter 包括一个颜色数据库,它将颜色名映射到相应的RGB值。这个数据库包括了通常的名称如Red, Green, Blue, Yellow, 和 LightBlue,也可使用外来的如Moccasin,PeachPuff等等。在X window系统上,颜色名由X server定义。你能够找到 一个名为xrgb.txt的文件,它包含了一个由颜色名和相应RGB值组成的列表。在Windows和Macintosh系统上,颜色名表内建于Tk中。 在Windows下,你可以使用Windows系统颜色(用户可以通过控制面板来改变这些颜色): SystemActiveBorder, SystemActiveCaption, SystemAppWorkspace, SystemBackground, SystemButtonFace, SystemButtonHighlight, SystemButtonShadow, SystemButtonText, SystemCaptionText, SystemDisabledText, SystemHighlight, SystemHighlightText, SystemInactiveBorder, SystemInactiveCaption, SystemInactiveCaptionText, SystemMenu, SystemMenuText, SystemScrollbar, SystemWindow, SystemWindowFrame, SystemWindowText。 在Macintosh上,下面的系统颜色是有效的: SystemButtonFace, SystemButtonFrame, SystemButtonText, SystemHighlight, SystemHighlightText, SystemMenu, SystemMenuActive, SystemMenuActiveText, SystemMenuDisabled, SystemMenuText, SystemWindowBody。 颜色名是大小写不敏感的。许多颜色名词与词之间有无格都有效。例如"lightblue", "light blue", 和 "Light Blue"都是同一颜色。 2、RGB格式 如果你需要显式地指定颜色名,你可以使用如下格式的字符串: #RRGGBB RR, GG, BB 分别是red,green和blue值的十六进制表示。下面的例子演示了如何将一个颜色三元组转换为 一个Tk颜色格式: tk_rgb = "#%02x%02x%02x" % (128, 192, 200) Tk也支持用形如"#RGB"和"rrrrggggbbbb"去分别指定16和65536程度之间的值。 你可以使用窗口部件的winfo_rgb方法来将一个代表颜色的字符串(名字或RGB格式)转换为一个三元组: rgb = widget.winfo_rgb("red") red, green, blue = rgb[0]/256, rgb[1]/256, rgb[2]/256 注意winfo_rgb返回16位的RGB值,范围在0~65535之间。要将它们映射到更通用的0~255范围内,你必须将每个值都除以256(或将它们向右移8位)。 窗口部件的样式之字体 字体 窗口部件允许你显示文本和指定所使用的字体。所有的窗口部件都提供了合理的默认值,你很少需要去为简单元素如标签和按钮指定字体。 字体通常使用font窗口部件选项指定。Tkinter支持一定数量的不同字体描述类型: * Font descriptors * User-defined font names * System fonts * X font descriptors Tk8.0以前的版本仅X font描述被支持。 1、字体描述 从Tk8.0开始,Tkinter支持独立于平台的字体描述。你可以使用元组来指定一个字体,这个元组包含了一个字体类型名字,一个以磅为单位的高度,代表一个或多个样式的字符串。例如: ("Times", 10, "bold") ("Helvetica", 10, "bold italic") ("Symbol", 8) 要得到默认的尺寸和类型,你可以给梦芭莎优惠券出作为单一字符串的字体名。如果这个字体类型名字没有包括空格,你也可以给这个字符串自身增加尺寸和样式: "Times 10 bold" "Helvetica 10 bold italic" "Symbol 8" 在大部份Windows平台上存在如下有效的字体类名: Arial (相 应 于 Helvetica), Courier New (Courier), Comic Sans MS, Fixedsys, MS Sans Serif, MS Serif, Symbol, System, Times New Roman (Times), 和 Verdana: 注意:如果这个字体类型名包含空格,你必须使用上面所描述的元组语法。 有效的样式有normal, bold, roman, italic, underline, and overstrike。 Tk8.0自动映射Courier, Helvetica, 和Times到所有平台上相应的本地字体类型名。此外,在Tk8.0下字体格式不会引起问题,如果Tk不能找出确切的匹配,它会试着找类似的字体,如果失败,Tk就使用特定平台的默认字体。 Tk4.2在Windows下同样支持这种字体描述。这儿有几个限制,包括字体类型名必须在平台上存在,并非这所有上面样式名都存在(或它们中的一些有不同的名字)。 2、字体名 此外,Tk8.0允许你去创建已命名的字体并且当为一个窗口部件指定字体时使用它们的名字。 tkFont模块提供一个Font类,这个类允许你去创建字体实例。你可以随处使用这样一个实例。你也可能使用一个字体实例来得到字体的量度,包括存在于那个字体中的字符串所站用的尺寸。 tkFont.Font(family="Times", size=10, weight=tkFont.BOLD) tkFont.Font(family="Helvetica", size=10, weight=tkFont.BOLD, slant=tkFont.ITALIC) tkFont.Font(family="Symbol", size=8) 如果你修改一个已命名的字体(使用config方法),这个改变将自动影响到所有使用这个字体的窗口部件。 Font构造器支持下列的样式选项(注意常量被定义在tkFont模块中): 样式选项及说明: family选项 类型:字符串 说明:字体类型 size选项 类型:整型 说明:以磅为单位的字体的尺寸。要以象素为单位的话,使用负值。 weight选项 类型:常量 说明:字体的粗细。使用NORMAL或BOLD。默认为NORMAL。 slant选项 类型:常量 说明:字体倾斜。使用NORMAL或ITALIC。默认为NORMAL。 underline选项 类型:标志 说明:字体下划线。如果1(true),字体加下划线。默认为0(false)。 overstrike选项 类型:标志 说明:字体划线。如果为1(true),则字体上有一条线;默认为0(false)。 3、系统字体 Tk也支持特定系统的字体名。在X下,这些通常是字体别名如fixed,6x10等等。 在Windows下,这些包括ansi,ansifixed,device,oemfixed,system和systemfixed: 在Macintosh上,系统字体名是application和system。 注意:系统字体是字体名,不是字体类型名,它们不能与尺寸或样式属性结合。为了可移植性,尽可能避免使用这些名字。 4、X字体描述 X字体描述是如下格式的字符串(星号所代表的是无关字段。具体细节可查看Tk文档或X手册): -*-family-weight-slant-*--*-size-*-*-*-*-charset 典型的字体类别如:Times, Helvetica, Courier or Symbol。 weight可以是"Bold"或"Normal"。slant取值中R代表"roman"(正常),I代表"italic",o代表团"oblique"(实际上等同于italic)。 size是字体的高度,以十分之一磅为单位。一英寸72磅,但是一些低分辩率的显示器的1磅较常规的大些,以便小字体能够清晰显示。charset(字符集)通常是ISO8859-1 (ISO Latin 1), 但一些字体也使用其它的值。 下面的描述的family取值是Times,weight取值是Bold,slant取值是R,size取值是120,charset取值是ISO8859-1: -*-Times-Bold-R-*--*-120-*-*-*-*-ISO8859-1 如果你不关心charset(字符集),或你使用如Symbol的字体(这种字体类别有特定的字符集),那么你可以使用一个星号作为描述的最后部分: -*-Symbol-*-*-*--*-80-* 典 型的X server至少支持Times, Helvetica, Courier等字体,size有8, 10, 12, 14, 18, 和 24 磅,weight有normal,bold、italic(Times)或oblique(Helvetica, Courier)。大多数的服务器都有 支持随意查看字体。你可以使用如xlsfonts和xfontsel来检查你所访问的服务器的字体。 这种类型的字体描述可以用在Windows 和Macintosh上。注意:如果你使用Tk4.2,你必须牢记字体类型必须是Windows所支持的一种。 格式化文本 虽然文本标签和按钮通常包含单行文本,但Tkinter也支持多行。要分离文本到多行,只需要在必要的地方插入换行符(\n)。 默认情况下,文本居中。你也可以通过设置justify选项为LEFT或RIGHT来改变文本的位置。默认值是CENTER。 你也可以使用wraplenth选项来设置一个最大宽度,并且让窗口部件自己调整多行文本。如果窗口部件太窄,它将使单个词跨行。 边框 所有的Tkinter窗口部件都有边框(尽管对于某些窗口部件默认是不显示边框的)。边框由一个可选的3D浮雕和一个焦点高亮区域组成。 一、relief 这个relief设置控制如何绘制窗口部件的3D边框: borderwidth(或bd)是边框的宽度,以象素为单位。大多数的窗口部件都有一个默认的1或2象素的边框宽度。 relief的取值可以有如下几种: SUNKEN, RAISED, GROOVE, RIDGE, and FLAT。 二、焦点高亮 这个高亮设置控制如何指示窗口部件(或它的孩子之一)获得了按键焦点。在大多数情况下,这个高亮区域是在relief外面的边框。下面的选项控制如何绘制另外的边框: highlightcolor用来绘制当窗口部件获得按键焦点的高亮区域。通常是黑色或别的明显的对比色。 highlightbackground用来绘制当窗口部件没获得焦点的高亮区域。通常与窗口部件的背景色一样。 highlightthickness选项是高亮区域的宽度,以象素为单位。对于那些获得按键焦点的窗口部件通常是1或2个象素 三、光标 这个cursor选项控制当鼠标移动到窗口部件上时使用哪种鼠标光标。如果这个选项没有设置,这个窗口部件将使用和它父亲一样的鼠标指针。 注意:一些窗口部件(包括Text和Entry窗口部件)默认设置cursor选项。 下面是一些内建的鼠标光标的样式: 事件和绑定 正如早些时候,一个Tkinter应用程序大部分时间花费在事件循环中(通过mainloop方法进入事件循环)。事件来自不同的消息,包括用户按下按键和鼠标操作,和来自于窗口管理器的重绘事件(在许多情况下不是由用户直接引起)。 Tkinter提供了强大的机制让你可以自己处理事件。对于任一窗口部件,你可以为事件绑定Python函数和方法: widget.bind(event, handler) 如果发生在窗口部件中的事件与所描述的事件匹配,那么所给定的handler(处理器)将被描述这个事件的对象调用。 下面是一个捕获窗口中的点击的例子: # File: bind1.py from Tkinter import * root = Tk() def callback(event): print "clicked at", event.x, event.y frame = Frame(root, width=100, height=100) frame.bind("", callback) frame.pack() root.mainloop() 上面这个例子,我们使用了frame窗口部件的bind方法为一个事件调用绑定了一个回调函数。运行这个程序并在所显示的窗口中点击。每次点击,在控制台窗口中都会打印一条如"clicked at 44 63"这样的信息。 一、事件 事件以字符串的形式给出,使用特定的语法: type 字段是事件区分符中最重要的部分。它指定了我们希望去绑定的事件种类,如用户的按钮、按键动作,或如Enter,Configure等窗口管理器事件。 modifier和detail字段被用来给出附加的信息,在多数情况下可以不用。这儿也有不同的方法去简化事件字符串;例如,要匹配一个键盘键,你可以 不用尖括号而只使用这个键。当然,除非它的一个空格或一个尖括号。 下面我们给出最常用的事件及其说明: 事件 说 明:鼠标按钮在窗口部件上按下。button 1是鼠标左按钮,button 2是鼠标中间的按钮(如果有的话),button 3是鼠标右按钮。当你在 一窗口部件上按下一个鼠标按钮时,Tkinter将自动抓取鼠标指针,在鼠标按钮被按下时鼠标事件将被发送给当前窗口部件。鼠标指针相对于窗口部件的当前 位置被提供给传递给回调函数的event对象的x和y成员中。 你可以用 ButtonPress 代替Button,或只用<1>(这等同于, )。 事件 说明:鼠标移动并且鼠标左键被按住(B2代表鼠标中间按键,B3代表鼠标右按键)。鼠标指针相对于窗口部件的当前位置被提供给传递给回调函数的event对象的x和y成员中。 事件 说明:鼠标左键释放。鼠标指针相对于窗口部件的当前位置被提供给传递给回调函数的event对象的x和y成员中。 事件 说明:鼠标左键双击。你可以用Triple代替Double。 事件 说明:鼠标指针位于窗口部件中(这个事件不代表回车) 事件 说明:鼠标指针离开窗口部件。 事件 说 明:用户按下Enter键。你可以绑定到键盘上的所有实际上的键。对于通常的102键盘,这专用键有 Cancel,BackSpace,Tab,Enter,Shift_L,Control_L,Alt_L,Pause, Caps_Lock, Escape, PageUp, Page Down, End, Home, Left, Up, Right, Down, Print, Insert, Delete, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, Num_Lock, 和 Scroll_Lock。 事件 说明:用户按下任一键。这个键被提供给传递给回调函数的event对象的char成员中。 a事件 说明:用户键入"a"。大部分的可打印字符都可替换a。这个例外是空格() 和小于()。 事件 说明:用户按下向上箭头,同时按住shift键。你可以用Alt,Control代替shift。 事件 说明:窗口部件的尺寸改变(某些平台上是位置改变)。新的尺寸被提供给传递给回调函数的event对象的width和height属性中。 二、Event对象 Event对象是一个标准的Python对象实例,它的属性及说明如下: widget 说明:产生事件的窗口部件。这是一个有效的Tkinter窗口部件的实例,不是一个名字。这个属性为所有事件设置。 x,y 说明:当前鼠标指针的位置,以象素为单位。 x_root,y_root 说明:当前鼠标相对于屏幕左上方的位置,以象素为单位。 char 说明:字符代码(仅键盘事件),是一个字符串。 keysym 说明:键的符号(仅键盘事件)。 keycode 说明:键的代码(仅键盘事件)。 num 说明:鼠标按钮的数字(仅鼠标按钮事件)。 width,height 说明:窗口部件的新尺寸,以象素为单位(仅Configure事件) type 说明:事件类型。 为了兼容性,你应坚持使用char, height, width, x, y, x_root, y_root, 和 widget除非你确切地知道你在做什么。 三、实例和类绑定 上面的例子中我们使用bind方法创建一个实例绑定。这意味着这个绑定仅应用于单个窗口部件;如果你创建新的frame,它们将不继承这个绑定。 但是Tkinter也允许你在类和应用程序层上创建绑定;事实上,你可以在下面四个不同的层上创建绑定: *窗口部件实例,使用bind方法。 *窗口部件的顶层窗口(顶层或root),也使用bind方法。 *窗口部件类,使用bind_class方法(这是Tkinter提供的标准绑定)。 *整个应用程序,使用bind_all方法。 例如,你可以使用bind_all来为F1键创建一个到应用程序的绑定,这样你就可以在这个应用程序的任何地方提供帮助。但是如果你为同一个键创建多个绑定或提供重叠的绑定会发生什么呢? 首先,对于上面四种层别之一的任何一种,Tkinter选择有效绑定的最近匹配。例如,如果你为事件创建了实例绑定,那么如果你按下了Enter键则只是这第二个绑定将被调用。 然而,如果你增加一个绑定到顶层窗口部件,则两个绑定都会被调用。Tkinter首先调用实例层的绑定,然后调用顶层窗口层绑定,然后是类层(通常是一个标准绑定),最后是应用程序层。因此在极端的情况下,一个事件可以调用四个事件处理器。 一个引起混淆的情况是什么时候你使用绑定去覆盖一个标准窗口部件的默认行为。例如,假设你希望Enter在文本窗口部件中无效,以使用户不能在文本中插入新行。下面的代码可以实现吗? def ignore(event): pass text.bind("< http://www.bboby.com >", ignore) 或用下面一行代码: text.bind("", lambda e: None) 不幸的是,这个新行仍然插入了,因为上面的绑定仅应用于实例层,页标准的行为是由类层的绑定提供。 你可以使用bind_class方法来修改类层上的绑定,但是这将改变应用程序中的所有文本窗口部件的行为。 一个简单的解决方法是阻止Tkinter传递事件给别的处理器;并且你的事件处理器只返回"break"字符串: def ignore(event): return "break" text.bind("", ignore) 或 text.bind("", lambda e: "break") 顺便说说,如果你真想改变应用程序中的所有文本窗口部件的行为,可以使用bind_class方法: top.bind_class("Text", "", lambda e: None) 但是基于很多原因你是不会这样做的。例如,如果你希望使用从网上下载的一些酷而小的UI组件来扩展你的应用程序,这样做将会将应用程序完全搞乱。较好的方法是使用你自己定制的文本窗口部件类,这样就可以保持Tkinter默认绑定的完好: class MyText(Text): def __init__(self, master, **kw): apply(Text.__init__, (self, master), kw) self.bind("", lambda e: "break") 四、 协议 离婚协议模板下载合伙人协议 下载渠道分销协议免费下载敬业协议下载授课协议下载 (protocols) 除了事件绑定,Tkinter也支持一个称作协议处理器的机制。在这里,协议这个术语是指应用程序与窗口管理器之间的交互。最常被使用的协议名为WM_Delete_WINDOW,它被用来定义当用户显式使用窗口管理器关闭一个窗口时发生什么。 你可以使用protocol方法去为这个协议安装一个处理器(窗口部件必须是root或顶层窗口部件): widget.protocol("WM_Delete_WINDOW", handler) 一旦你安装了你自己的处理器,Tkinter将不再自动关闭窗口。作为代替,比如你可以显示一个信息框询问用户当前数据是否保存。要从处理器关闭窗口,你只需要调用这个窗口的destroy方法: 例子、捕获destroy事件: # File: protocol1.py from Tkinter import * import tkMessageBox def callback(): if tkMessageBox.askokcancel("Quit", "Do you really wish to quit?"): root.destroy() root = Tk() root.protocol("WM_Delete_WINDOW", callback) root.mainloop() 注意:即使你在顶层窗口上不为WM_Delet
本文档为【Tkinter基本入门文字教程(详细介绍Tkinter各项例程)】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_821327
暂无简介~
格式:doc
大小:200KB
软件:Word
页数:42
分类:互联网
上传时间:2014-01-22
浏览量:269