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

上传人:仙*** 文档编号:129063726 上传时间:2022-08-02 格式:DOC 页数:40 大小:147KB
收藏 版权申诉 举报 下载
Tkinter基本入门文字教程详细介绍Tkinter各项例程_第1页
第1页 / 共40页
Tkinter基本入门文字教程详细介绍Tkinter各项例程_第2页
第2页 / 共40页
Tkinter基本入门文字教程详细介绍Tkinter各项例程_第3页
第3页 / 共40页
资源描述:

《Tkinter基本入门文字教程详细介绍Tkinter各项例程》由会员分享,可在线阅读,更多相关《Tkinter基本入门文字教程详细介绍Tkinter各项例程(40页珍藏版)》请在装配图网上搜索。

1、什么是TkinterTkinter(也叫Tk接口)是Tk图形用户界面工具包标准的Python接口。Tk是一个轻量级的跨平台图形用户界面(GUI)开发工具。Tk和Tkinter可以运行在大多数的Unix平台、Windows、和Macintosh系统。Tkinter 由一定数量的模块组成。Tkinter位于一个名为_tkinter(较早的版本名为tkinter)的二进制模块中 。Tkinter包含了对Tk的低 级接口模块,低级接口并不会被应用级程序员直接使用,通常是一个共享库(或DLL),但是在一些情况下它也被Python解释器静态。除了Tk接口模块,Tkinter也包含了一定数量的Python模

2、块。其中两个最重要的模块是Tkinter本身和名为Tkconstants的模块。前者自动引导后者,因此使用Tkinter,你首先需要做的是导入Tkinter模块,代码如下:import Tkinter或from Tkinter import *第一个Tkinter程序一、代码如下:# File: hello1.pyfrom Tkinter import *root = Tk()w = Label(root, text=Hello, world!)w.pack()root.mainloop()运行结果如下:关闭这个窗口即可终止这个程序的运行。二、对代码的说明:我们通过导入Tkinter模块开始。

3、Tkinter模块包含了用Tk工具包工作所需的所有的类,函数和其它一些必须的东西。在大多数情况下,你只需要简单的从Tkinter导入所有的东西到你的模块的名字空间,如下所示:from Tkinter import *然 后初始化Tkinter,方法是我们必须先创建一个Tk root(根)窗口部件,它是一个普通的窗口,带有标题条和其它由你的窗口管理器供给的附属。你 应该只创建一个root窗口部件,这个root窗口部件必须在其它窗口部件创建之前创建。初始化Tkinter的代码如下:root = Tk()接着我们创建一个Label(标签)窗口部件作为这个root窗口的孩子,代码如下:w = Labe

4、l(root, text= :/ bboby!)Label窗口部件可以显示文本、图标或图象。我们这里用text选项来指定要显示的文本。接下来我们在Label窗口部件上调用了pack方法,它告诉Label窗口部件去调整自己的尺寸来适应所给定文本的大小,并且使用自己可见,代码如下:w.pack()但是在这些发生之前,我们必须进入Tkinter的事件循环,代码如下:root.mainloop()这 个程序将一直处在事件循环之中,直到我们关闭了这个窗口。事件循环不仅仅处理来自用户的事件(如鼠标敲击和按键按下)或者窗口系统(重绘事件和窗口配置消 息),它也处理来自Tkinter自身的工作等待队列,这些工

5、作之一就包括由pack方法所产生的工作和显示更新。这就意味着这个应用程序窗口在进入这个 事件循环之前将不会显示出来。 第二个Tkinter程序当我们在写一个较大的程序的时候,把代码封装在类中通常是一个好的主意。一、代码如下:# File: hello2.pyfrom 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

6、.pack(side= :/ bbobyLEFT) 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按钮,程序将终止。二、代码说明:这个简单的应用程序被写成了一个类。这个构造器(

7、_init_ 方法)通过一个父部件被调用,并针对父部件增加了一些子部件。构造器通过创建一个Frame(帧)窗口部件开始。一个帧是一个简单的容器,在这个例子中,我们仅用来容纳另外的两个部件。class App: def _init_(self, master): frame = Frame(master) frame.pack()这个帧实例被存储在一个名为Frame的局部变量中。在创建了这个部件后,我们立即调用pack方法来使用这个帧可见。然后我们创建两个Button(按钮)窗口部件作为这个帧的孩子。self.button = Button(frame, text=QUIT, fg=red, c

8、ommand=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 参数表示这两个按钮在帧中将被分开放置;第一个按钮被

9、放置在帧的左边缘,第二个被放在第一个的右边(帧 的左边缘仍保留着空格)。默认情况下,部件的放置都是相对于它们的父亲(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.mainlo

10、op()root.mainloop()调用root部件的mainloop方法。它进入Tk事件循环,这个应用程序将处于这个Tk事件循环之中直到quit方法被调用(点击QUIT按钮),或窗口被关闭。 关于窗口部件引用在第二个例子中,frame部件被存储在一个名为frame的局部变量中,而button部件则存储在两个实例的属性组中。这是否隐藏着一个严重的问题呢:当 _init_ 函数返回并且frame变量超出了范围会发生什么呢?。不 要紧;这儿确实没有必要去保持对窗口部件实例的引用。Tkinter自动维护一个窗口部件树(通过对象实例的master和children属性),因 此,当应用程序的最后一个

11、引用消失时窗口部件不会消失;窗口部件必须显示的用destroy方法销毁。但是如果你希望在窗口部件被创建以后用它来做一些事 情,你最好保持对你自己的窗口部件实例的引用。注意如果你不需要保持对一个窗口部件的引用,你可以用单独的一行来创建和pack(包装)它,如下:Button(frame, text=Hello, command=self.hello).pack(side=LEFT)不要存储这个操作的结果,当你试图去用这个结果时你会很失望(因为pack方法返回None)。为小心起见,最好将将pack(包装)分开,如下所示:w = Button(frame, text=Hello, command=

12、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自动为每个新

13、 窗口部件赋一个唯一的名字。在这个Tkinter案例中,这个dialog的名字或许类似.1428748,并且button可能 是.1428748.1432920。如果你希望得到一个Tkinter窗口部件的完整名字,你可以在这个窗口部件实例上使用str函数: print str(ok).1428748.1432920如果你确实需要为一个窗口部件指定一个名字,你可以在你创建这个窗口部件时使用name选项。你这么做的原因可能是你需要和用Tcl写的代码接口。下面的例子将产生一个名为.dialog.ok的窗口部件(如果你忘了命名dialog,那么名字可能类似.1428748.ok):ok = Butto

14、n(dialog, name=ok)为了避免与此同时Tkinter的名字机制相冲突,不要使用只包含数字的名字。同样注意name是只能创建一次的选项;一旦你创建了这个部件的名字,那么你就不能再改变它的名字了。 Tkinter类之窗口部件类Tkinter支持15个核心的窗口部件,这个15个核心窗口部件类列表如下:窗口部件与说明:Button:一个简单的按钮,用来执行一个命令或别的操作。Canvas:组织图形。这个部件可以用来绘制图表和图,创建图形编辑器,实现定制窗口部件。Checkbutton:代表一个变量,它有两个不同的值。点击这个按钮将会在这两个值间切换。Entry:文本输入域。Frame:一

15、个容器窗口部件。帧可以有边框和背景,当创建一个应用程序或dialog(对话)版面时,帧被用来组织其它的窗口部件。Label:显示一个文本或图象。Listbox:显示供选方案的一个列表。listbox能够被配置来得到radiobutton或checklist的行为。Menu:菜单条。用来实现下拉和弹出式菜单。Menubutton:菜单按钮。用来实现下拉式菜单。Message:显示一文本。类似label窗口部件,但是能够自动地调整文本到给定的宽度或比率。Radiobutton:代表一个变量,它可以有多个值中的一个。点击它将为这个变量设置值,并且清除与这同一变量相关的其它radiobutton。Sc

16、ale:允许你通过滑块来设置一数字值。Scrollbar:为配合使用canvas, entry, listbox, and text窗口部件的标准滚动条。Text:格式化文本显示。允许你用不同的样式和属性来显示和编辑文本。同时支持内嵌图象和窗口。Toplevel:一个容器窗口部件,作为一个单独的、最上面的窗口显示。注意在Tkinter中窗口部件类没有分级;所有的窗口部件类在树中都是兄弟。所有这些窗口部件提供了Misc和几何管理方法、配置管理方法和部件自己定义的另外的方法。此外,Toplevel类也提供窗口管理接口。这意味一个典型的窗口部件类提供了大约150种方法。 Button窗口部件Butt

17、on(按钮)窗口部件是一个标准的Tkinter窗口部件,用来实现各种按钮。按钮能够包含文本或图象,并且你能够将按钮与一个Python函数或方法相关联。当这个按钮被按下时,Tkinter自动调用相关联的函数或方法。按钮仅能显示一种字体,但是这个文本可以跨行。另外,这个文本中的一个字母可以有下划线,例如标明一个快捷键。默认情况,Tab键用于将焦点移动到一个按钮部件。一、那么什么时候用按钮部件呢?简而言之,按钮部件用来让用户说“马上给我执行这个任务”,通常我们用显示在按钮上的文本或图象来提示。按钮通常用在工具条中或应用程序窗口中,并且用来接收或忽略输入在对话框中的数据。关于按钮和输入的数据的配合,可

18、以参看Checkbutton和Radiobutton部件。二、样式普通的按钮很容易被创建,仅仅指定按钮的内容(文本、位图、图象)和一个当按钮被按下时的回调函数即可:b = Button(master, text=OK, command=self.ok)没有回调函数的按钮是没有用的,当你按下这个按钮时它什么也不做。你可能在开发一个应用程序的时候想实现这种按钮,比如为了不干扰你的beta版的测试者:b = Button(master, text=Help, state=DISABLED)如 果你没有指定尺寸,按钮的大小将正好能够容纳它的内容。你可以用padx和pady选项来增加内容与按钮边框的间距

19、。你也可以用height和width 选项来显式地设置按钮的尺寸。如果你在按钮中显示文本,那么这些选项将以文本的单位为定义按钮的尺寸。如果你替而代之显示图象,那么按钮的尺寸将是象素 (或其它的屏幕单位)。你实际上甚至能够用象素单位来定义文本按钮的尺寸,但这可能带来意外的结果。下面是指定尺寸的一段例子代码:f = Frame(master, height=32, width=32)f.pack_propagate( :/ bboby) # dont shrinkb = Button(f, text=Sure!)b.pack(fill=BOTH, expand=1)按钮能够显示多行文本(但只能用一

20、种字体)。 你可以使用多行或wraplength选项来使按钮自己调整文本。当调整文本时,使用anchor,justify,也可加上padx选项来得到你所希望的格式。一个例子如下:b = Button(master, text=longtext, anchor=W, justify=LEFT, padx=2)为了使一个普通的按钮看起来像凹入的,例如你想去实现某种类型的工具框,你可简单地将relief的值从RAISED改变为SUNKEN:b.config(relief=SUNKEN)你也可能想改变背景。注意:一个大概更好的解决方案是使用一个Checkbutton或Radiobutton其indic

21、atoron选项的值设置为false:b = Checkbutton(master, image=bold, variable=var, indicatoron=0)三、方法Button窗口部件支持标准的Tkinter窗口部件接口,加上下面的方法:flash():频繁重画按钮,使其在活动和普通样式下切换。invoke() :调用与按钮相关联的命令。下面的方法与你实现自己的按钮绑定有关:tkButtonDown(), tkButtonEnter(), tkButtonInvoke(), tkButtonLeave(), tkButtonUp() 这些方法可以用在定制事件绑定中,所有这些方法接收0

22、个或多个形参。四、选项Button窗口部件支持下面的选项:activebackground, activeforeground类型:颜色;说明:当按钮被激活时所使用的颜色。anchor类型:常量;说明:控制按钮上内容的位置。使用N, NE, E, SE, S, SW, W, NW, or CENTER这些值之一。默认值是CENTER。background (bg), foreground (fg)类型:颜色;说明:按钮的颜色。默认值与特定平台相关。bitmap类型:位图;说 明:显示在窗口部件中的位图。如果image选项被指定了,则这个选项被忽略。下面的位图在所有平台上都有 效:error,

23、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

24、。borderwidth (bd)类型:整数;说明:按钮边框的宽度。默认值与特定平台相关。但通常是1或2象素。command类型:回调;说明:当按钮被按下时所调用的一个函数或方法。所回调的可以是一个函数、方法或别的可调用的Python对象。cursor类型:光标;说明:当鼠标移动到按钮上时所显示的光标。default类型:常量;说明:如果设置了,则按钮为默认按钮。注意这个语法在Tk 8.0b2中已改变。disabledforeground类型:颜色;说明:当按钮无效时的颜色。font类型:字体;说明:按钮所使用的字体。按钮只能包含一种字体的文本。highlightbackground, hig

25、hlightcolor类型:颜色;说明:控制焦点所在的高亮边框的颜色。当窗口部件获得焦点的时候,边框为highlightcolor所指定的颜色。否则边框为highlightbackground所指定的颜色。默认值由系统所定。highlightthickness类型:距离;说明:控制焦点所在的高亮边框的宽度。默认值通常是1或2象素。image类型:图象;说明:在部件中显示的图象。如果指定,则text和bitmap选项将被忽略。justify类型:常量;说明:定义多行文本如何对齐。可取值有:LEFT, RIGHT, 或 CENTER。padx, pady类型:距离;说明:指定文本或图象与按钮边框的

26、间距。relief类型:常量;说明:边框的装饰。通常按钮按下时是凹陷的,否则凸起。另外的可能取值有GROOVE, RIDGE, 和 FLAT。state类型:常量;说明:按钮的状态:NORMAL, ACTIVE 或 DISABLED。默认值为NORMAL。takefocus类型:标志;说明:说明用户可以Tab键来将焦点移到这个按钮上。默认值是一个空字符串,意思是如果按钮有按键绑定的话,它可以通过所绑定的按键来获得焦点。text类型:字符串;说明:显示在按钮中的文本。文本可以是多行。如果bitmaps或image选项被使用,则text选项被忽略。textvariable类型:变量;说明:与按钮相

27、关的Tk变量(通常是一个字符串变量)。如果这个变量的值改变,那么按钮上的文本相应更新。underline类型:整数;说明:在文本标签中哪个字符加下划线。默认值为-1,意思是没有字符加下划线。width, height类型:距离;说明:按钮的尺寸。如果按钮显示文本,尺寸使用文本的单位。如果按钮显示图象,尺寸以象素为单位(或屏幕的单位)。如果尺寸没指定,它将根据按钮的内容来计算。wraplength类型:距离;说明:确定一个按钮的文本何时调整为多行。它以屏幕的单位为单位。默认不调整。MixinsTkinter模块提供了相应于Tk中的各种窗口部件类型的类和一定数量的mixin和别的帮助类(mixin

28、是一个类,被设计来使用多态继承与其它的类结合)。当你使用Tkinter时,你不将直接访问mixin类。一、实施mixins通过root窗口和窗口部件类,Misc类被用作mixin。它提供了大量的Tk和窗口相关服务,这些服务对所有Tkinter核心窗口部件者有效。这些通过委托完成;窗口部件仅仅直接请求适当的内部对象。Wm类通过root窗口和顶级窗口部件类被用作mixin。通过委托它提供了窗口管理服务。使用委托像这样简化你的应用程序代码:一旦你有一窗口部件,你能够使用这个窗口部件的实例的方法访问Tkinter的所有部份。二、Geometry(几何学)与mixinsGrid,Pack,Place这些

29、类通过窗口部件类被用作mixins。通过委托,它们也提供了访问不同几何管理的支持。下面是Geometry Mixins的列表与说明:管理器与说明:Grid:grid几何管理器允许你通过在一个二维网格中组织窗口部件来创建一个类似表的版面。Pack:pack几何管理器通过在一个帧中把窗口部件包装到一个父部件中来创建一个版面。为了对窗口部件使用这个几何管理器,我们在这个窗口部件上使用pack方法来集成。Place:place几何管理器让你显式将一个窗口部件放到给定的位置。要使用这个几何管理器,需使用place方法。三、窗口部件配置管理Widget类使用 geometry mixins来混合Misc类

30、,并通过cget和configure方法来增加配置管理,也可以通过一个局部的字典接口。 窗口部件的配置要配置一个窗口部件的外观,你用选项比使用方法调用好。典型的选项包括text、color、size、command等等。对于处理选项,所有的核心窗口部件执行同样的配置接口:配置接口widgetclass(master, option=value, .) = widget 说明:创 建这个窗口部件的一个实例,这个实例作为给定的master的孩子,并且使用给定的选项。所有的选项都有默认值,因此在简单的情况下,你仅需要指定这个 master。如果你想的话,你也可以不指定master;Tkinter这时

31、会使用最近创建的root窗口作为master。注意这个name选项仅能 在窗口部件被创建时设置。cget(option) = string 说明:返回一个选项的当前值。选项的名字和返回值都是字符串。要得到name选项,使用str(widget)代替。configure(option=value, .), config(option=value, .) 说明:设置一个或多个选项(作为关键字参数给定)。注意一些选项的名字与Python中的保留字相同(class,from等)。要使用这些作为关键字参数,仅需要在这些选项名后添加一下划线(class_,from_)。注意你不能用此方法来设置name选项

32、;name选项只能在窗口部件被创建时设置。为了方便起见,窗口部件也实现一个局部的字典接口。 _setitem_ 方法映射configure,而_getitem_方法映射cget。你可以使用下面的语法来设置和查询选项:value = widget :/ bbobywidgetoption = value注意每个赋值都导致一个对Tk的调用。如果你希望去改变多个选项,单独地调用(config或configure)去改变它们是一个好的主意。这下面的字典方法也适用于窗口部件:keys() = list 说明:返回窗口部件中所有可以被设置的选项的一个列表。name选项不包括在这个列表中(它不能通过字典接口

33、被查询或修改)。 向后兼容性关键字参数在Python1.3时被引入。之前,使用原始的Python字典将选项传递给窗口构造器和configure方法。原代码类似如下:self.button = Button(frame, text: QUIT, fg: red, command: frame.quit)self.button.pack(side: LEFT)关键字参数语法更优雅和少容易发生错误。但是为了与存在的代码兼容,Tkinter仍支持老的语法。在新的程序中你不应再用老的语法,即使是在某些情况下是很有吸引力的。例如,如果你创建了一个定制的窗口部件,它需要沿它的父类传递配置选项,你的代码可能如

34、下: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,因为我们调用一个未约束的方法),一个可选的,提供了关键字参数的字典。 窗口部件的样式之颜色所有的T

35、kinter标准窗口部件提供了一套样式设置选项,这让你可以去修改这些窗口部件的外观如颜色、字体和其它的可视外观。颜色大部份窗口部件都允许你指定窗口部件和文本的颜色,这可以使用background和foreground选项。要指定颜色,你可以使用颜色名,也可以使用红、绿、蓝颜色组合。1、颜色名Tkinter 包括一个颜色数据库,它将颜色名映射到相应的RGB值。这个数据库包括了通常的名称如Red, Green, Blue, Yellow, 和 LightBlue,也可使用外来的如Moccasin,PeachPuff等等。在X window系统上,颜色名由X server定义。你能够找到 一个名为x

36、rgb.txt的文件,它包含了一个由颜色名和相应RGB值组成的列表。在Windows和Macintosh系统上,颜色名表内建于Tk中。在Windows下,你可以使用Windows系统颜色(用户可以通过控制面板来改变这些颜色):SystemActiveBorder, SystemActiveCaption, SystemAppWorkspace, SystemBackground, SystemButtonFace, SystemButtonHighlight, SystemButtonShadow, SystemButtonText, SystemCaptionText, SystemDisa

37、bledText, SystemHighlight, SystemHighlightText, SystemInactiveBorder, SystemInactiveCaption, SystemInactiveCaptionText, SystemMenu, SystemMenuText, SystemScrollbar, SystemWindow, SystemWindowFrame, SystemWindowText。在Macintosh上,下面的系统颜色是有效的:SystemButtonFace, SystemButtonFrame, SystemButtonText, System

38、Highlight, SystemHighlightText, SystemMenu, SystemMenuActive, SystemMenuActiveText, SystemMenuDisabled, SystemMenuText, SystemWindowBody。颜色名是大小写不敏感的。许多颜色名词与词之间有无格都有效。例如lightblue, light blue, 和 Light Blue都是同一颜色。2、RGB格式如果你需要显式地指定颜色名,你可以使用如下格式的字符串:#RRGGBBRR, GG, BB 分别是red,green和blue值的十六进制表示。下面的例子演示了如何将

39、一个颜色三元组转换为一个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 = rgb0/256, rgb1/256, rgb2/256注意winfo_rgb返回16位的RGB值,范围在065535之间。要将它们映射到更通用的0255范围内,你必须将每个值都除以256(或将它

40、们向右移8位)。 窗口部件的样式之字体字体窗口部件允许你显示文本和指定所使用的字体。所有的窗口部件都提供了合理的默认值,你很少需要去为简单元素如标签和按钮指定字体。字体通常使用font窗口部件选项指定。Tkinter支持一定数量的不同字体描述类型:* Font descriptors* User-defined font names* System fonts* X font descriptorsTk8.0以前的版本仅X font描述被支持。1、字体描述从Tk8.0开始,Tkinter支持独立于平台的字体描述。你可以使用元组来指定一个字体,这个元组包含了一个字体类型名字,一个以磅为单位的高度

41、,代表一个或多个样式的字符串。例如:(Times, 10, bold)(Helvetica, 10, bold italic)(Symbol, 8)要得到默认的尺寸和类型,你可以给梦芭莎优惠券出作为单一字符串的字体名。如果这个字体类型名字没有包括空格,你也可以给这个字符串自身增加尺寸和样式:Times 10 boldHelvetica 10 bold italicSymbol 8在大部份Windows平台上存在如下有效的字体类名:Arial (相 应 于 Helvetica), Courier New (Courier), Comic Sans MS, Fixedsys, MS Sans Se

42、rif, 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下同样支持这种字体

43、描述。这儿有几个限制,包括字体类型名必须在平台上存在,并非这所有上面样式名都存在(或它们中的一些有不同的名字)。2、字体名此外,Tk8.0允许你去创建已命名的字体并且当为一个窗口部件指定字体时使用它们的名字。tkFont模块提供一个Font类,这个类允许你去创建字体实例。你可以随处使用这样一个实例。你也可能使用一个字体实例来得到字体的量度,包括存在于那个字体中的字符串所站用的尺寸。 tkFont.Font(family=Times, size=10, weight=tkFont.BOLD) tkFont.Font(family=Helvetica, size=10, weight=tkFont

44、.BOLD, slant=tkFont.ITALIC) tkFont.Font(family=Symbol, size=8)如果你修改一个已命名的字体(使用config方法),这个改变将自动影响到所有使用这个字体的窗口部件。Font构造器支持以下的样式选项(注意常量被定义在tkFont模块中):样式选项与说明:family选项类型:字符串说明:字体类型size选项类型:整型说明:以磅为单位的字体的尺寸。要以象素为单位的话,使用负值。weight选项类型:常量说明:字体的粗细。使用NORMAL或BOLD。默认为NORMAL。slant选项类型:常量说明:字体倾斜。使用NORMAL或ITALIC。

45、默认为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。注意:系统字体是字体名,不是字体类型名,它们不能与尺寸或样式属

46、性结合。为了可移植性,尽可能避免使用这些名字。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磅较常规的大些,以便小字体能

47、够清晰显示。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, Helvetic

48、a, 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)

49、。默认情况下,文本居中。你也可以通过设置justify选项为LEFT或RIGHT来改变文本的位置。默认值是CENTER。你也可以使用wraplenth选项来设置一个最大宽度,并且让窗口部件自己调整多行文本。如果窗口部件太窄,它将使单个词跨行。边框所有的Tkinter窗口部件都有边框(尽管对于某些窗口部件默认是不显示边框的)。边框由一个可选的3D浮雕和一个焦点高亮区域组成。一、relief这个relief设置控制如何绘制窗口部件的3D边框:borderwidth(或bd)是边框的宽度,以象素为单位。大多数的窗口部件都有一个默认的1或2象素的边框宽度。relief的取值可以有如下几种:SUNKEN

50、, RAISED, GROOVE, RIDGE, and FLAT。二、焦点高亮这个高亮设置控制如何指示窗口部件(或它的孩子之一)获得了按键焦点。在大多数情况下,这个高亮区域是在relief外面的边框。下面的选项控制如何绘制另外的边框:highlightcolor用来绘制当窗口部件获得按键焦点的高亮区域。通常是黑色或别的明显的对比色。highlightbackground用来绘制当窗口部件没获得焦点的高亮区域。通常与窗口部件的背景色一样。highlightthickness选项是高亮区域的宽度,以象素为单位。对于那些获得按键焦点的窗口部件通常是1或2个象素三、光标这个cursor选项控制当鼠标

51、移动到窗口部件上时使用哪种鼠标光标。如果这个选项没有设置,这个窗口部件将使用和它父亲一样的鼠标指针。注意:一些窗口部件(包括Text和Entry窗口部件)默认设置cursor选项。下面是一些内建的鼠标光标的样式:事件和绑定正如早些时候,一个Tkinter应用程序大部分时间花费在事件循环中(通过mainloop方法进入事件循环)。事件来自不同的消息,包括用户按下按键和鼠标操作,和来自于窗口管理器的重绘事件(在许多情况下不是由用户直接引起)。Tkinter提供了强大的机制让你可以自己处理事件。对于任一窗口部件,你可以为事件绑定Python函数和方法:widget.bind(event, handl

52、er)如果发生在窗口部件中的事件与所描述的事件匹配,那么所给定的handler(处理器)将被描述这个事件的对象调用。下面是一个捕获窗口中的点击的例子:# File: bind1.pyfrom 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方法为一

53、个事件调用绑定了一个回调函数。运行这个程序并在所显示的窗口中点击。每次点击,在控制台窗口中都会打印一条如clicked at 44 63这样的信息。一、事件事件以字符串的形式给出,使用特定的语法:type 字段是事件区分符中最重要的部分。它指定了我们希望去绑定的事件种类,如用户的按钮、按键动作,或如Enter,Configure等窗口管理器事件。 modifier和detail字段被用来给出附加的信息,在多数情况下可以不用。这儿也有不同的方法去简化事件字符串;例如,要匹配一个键盘键,你可以 不用尖括号而只使用这个键。当然,除非它的一个空格或一个尖括号。下面我们给出最常用的事件与其说明:事件说

54、明:鼠标按钮在窗口部件上按下。button 1是鼠标左按钮,button 2是鼠标中间的按钮(如果有的话),button 3是鼠标右按钮。当你在 一窗口部件上按下一个鼠标按钮时,Tkinter将自动抓取鼠标指针,在鼠标按钮被按下时鼠标事件将被发送给当前窗口部件。鼠标指针相对于窗口部件的当前 位置被提供给传递给回调函数的event对象的x和y成员中。你可以用 ButtonPress 代替Button,或只用(这等同于, )。事件说明:鼠标移动并且鼠标左键被按住(B2代表鼠标中间按键,B3代表鼠标右按键)。鼠标指针相对于窗口部件的当前位置被提供给传递给回调函数的event对象的x和y成员中。事件说

55、明:鼠标左键释放。鼠标指针相对于窗口部件的当前位置被提供给传递给回调函数的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

56、, 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和he

57、ight属性中。二、Event对象Event对象是一个标准的Python对象实例,它的属性与说明如下:widget说明:产生事件的窗口部件。这是一个有效的Tkinter窗口部件的实例,不是一个名字。这个属性为所有事件设置。x,y说明:当前鼠标指针的位置,以象素为单位。x_root,y_root说明:当前鼠标相对于屏幕左上方的位置,以象素为单位。char说明:字符代码(仅键盘事件),是一个字符串。keysym说明:键的符号(仅键盘事件)。keycode说明:键的代码(仅键盘事件)。num说明:鼠标按钮的数字(仅鼠标按钮事件)。width,height说明:窗口部件的新尺寸,以象素为单位(仅Con

58、figure事件)type说明:事件类型。为了兼容性,你应坚持使用char, height, width, x, y, x_root, y_root, 和 widget除非你确切地知道你在做什么。 三、实例和类绑定上面的例子中我们使用bind方法创建一个实例绑定。这意味着这个绑定仅应用于单个窗口部件;如果你创建新的frame,它们将不继承这个绑定。但是Tkinter也允许你在类和应用程序层上创建绑定;事实上,你可以在下面四个不同的层上创建绑定:*窗口部件实例,使用bind方法。*窗口部件的顶层窗口(顶层或root),也使用bind方法。*窗口部件类,使用bind_class方法(这是Tkint

59、er提供的标准绑定)。*整个应用程序,使用bind_all方法。例如,你可以使用bind_all来为F1键创建一个到应用程序的绑定,这样你就可以在这个应用程序的任何地方提供帮助。但是如果你为同一个键创建多个绑定或提供重叠的绑定会发生什么呢?首先,对于上面四种层别之一的任何一种,Tkinter选择有效绑定的最近匹配。例如,如果你为和事件创建了实例绑定,那么如果你按下了Enter键则只是这第二个绑定将被调用。然而,如果你增加一个绑定到顶层窗口部件,则两个绑定都会被调用。Tkinter首先调用实例层的绑定,然后调用顶层窗口层绑定,然后是类层(通常是一个标准绑定),最后是应用程序层。因此在极端的情况下,一个事件可以调用四个事件处理器。一个引起混淆的情况是什么时候你使用绑定去覆盖一个标准窗口部件的默认行为。例如,假设你希望Enter在文本窗口部件中无效,以使用户不能在文本中插入新行。下面的代码可以实现吗?def ignore(event): passtext.bind(, ignore)或用下面一行代码:text.bind(, lambda e: None)不幸的是,这个新行仍然插入了,因为上面的绑定仅应用于实例层,页标准的行为是由类层的绑定提供。你可以使用bind_class方法来修改类层上的绑定,但是

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!