1、第第4章章 Tkinter图形界面设计图形界面设计主讲主讲 夏敏捷夏敏捷计算机学院副教授计算机学院副教授开发猜数字游戏开发猜数字游戏【案例】使用tkinter开发猜数字游戏,运行效果如图所示。游戏中电脑随机生成1024以内数字,玩家去猜,如果猜得数字过大过小都会提示,程序要统计玩家猜的次数。4.1 Python图形开发库Python提供了多个图形开发界面的库,几个常用Python GUI库如下:(1)Tkinter(2)wxPython:wxPython 是一款开源软件,是 Python 语言的一套优秀的 GUI 图形库,允许 Python 程序员很方便的创建完整的、功能键全的 GUI 用户界
2、面。(3)Jython:Jython程序可以和Java无缝集成。除了一些标准模块,Jython使用Java的模块。Jython几乎拥有标准的Python中不依赖于C语言的全部模块。4.1.1 创建Windows窗口【例4-1】Tkinter创建一个Windows窗口的GUI程序。import tkinter#导入Tkinter模块win=tkinter.Tk()#创建Windows窗口对象win.title(我的第一个GUI程序)#设置窗口标题win.mainloop()#进入消息循环,也就是显示窗口4.1.2 几何布局管理器 Tkinter几何布局管理器用于组织和管理父组件(往往是窗口)中子
3、组件的布局方式。tkinter提供了3种不同风格的几何布局管理类:pack、grid和place。1packpack几何布局管理器4.1.2 几何布局管理器 2gridgrid几何布局管理器 grid几何布局管理采用表格结构组织组件。4.1.2 几何布局管理器 3placeplace几何布局管理器 place几何布局管理允许指定组件的大小与位置。place的优点是可以精确精确控制组件的位置,不足之处是改变窗口大小时,子组件不能随之灵活改变大小。4.2 常用Tkinter 组件的使用 4.2.1 Tkinter 4.2.1 Tkinter 组件组件4.2.2 标准属性 组件标准属性也就是所有组件
4、(控件)的共同属性,如大小,字体和颜色等等。常用的标准属性如表4-5所示。4.2.3 Label标签组件 Label组件用于在窗口中显示文本或位图。常用属性如表4-6所示。4.2.4 Button按钮组件 Button组件(控件)是一个标准的Tkinter部件,用于实现各种按钮。按钮可以包含文本或图像,您可以通过command属性将调用Python函数或方法关联到按钮上。Tkinter的按钮被按下时,会自动调用该函数或方法。该按钮可以只显示一个单一字体的文本,但文本可能跨越多行。此外,一个字符可以有下划线,例如标记的键盘快捷键。Tkinter Button按钮属性和方法如表4-7和4-8所示。
5、4.2.6 列表框组件Listbox 列表框组件列表框组件Listbox用于显示多个项目,并且允许用户选择一个或多个项目。4.2.7 单选按钮和复选框 单选按钮(Radiobutton)和复选框(Checkbutton)分别用于实现选项的单选和复选功能。Radiobutton用于同一组单选按钮中选择一个单选按钮(不能同时选定多个)。Radiobutton可以显示文本,也可以显示图像。Checkbutton用于选择一项或多项,同样Checkbutton可以显示文本,也可以显示图像。4.2.7 单选按钮和复选框 单选按钮(Radiobutton)和复选框(Checkbutton)分别用于实现选项的
6、单选和复选功能。Radiobutton用于同一组单选按钮中选择一个单选按钮(不能同时选定多个)。Radiobutton可以显示文本,也可以显示图像。Checkbutton用于选择一项或多项,同样Checkbutton可以显示文本,也可以显示图像。图形用户界面应用程序通常提供菜单,菜单包含各种按照主题分组的基本命令。图形用户界面应用程序包括2种类型的菜单。主菜单:提供窗体的菜单系统。通过单击可下拉出子菜单,选择命令可执行相关的操作。常用的主菜单通常包括:文件、编辑、视图、帮助等。上下文菜单(也称为快捷菜单):通过鼠标右击某对象而弹出的菜单,一般为与该对象相关的常用菜单命令。例如:剪切、复制、粘贴
7、等。4.2.8 菜单组件Menu4.2.9 对话框 对话框用于与用户交互和检索信息。tkinter模块中的子模块messagebox、filedialog、colorchooser、simpleDialog,包括一些通用的预定义对话框;用户也可以通过继承TopLevel创建自定义对话框。图图4-18 4-18 打开文件对话框运行效果打开文件对话框运行效果4.2.9 对话框 图图4-19 4-19 打开颜色对话框运行效果打开颜色对话框运行效果4.2.10 消息窗口(消息框)消息窗口(messagebox)用于弹出提示框向用户进行告警,或让用户选择下一步如何操作。消息框包括很多类型,常用的有inf
8、o、warning、error、yesno、okcancel等,包含不同的图标、按钮以及弹出提示音。4.2.11 Frame框架组件 Frame组件是框架组件,在进行分组组织其他组件的过程中是非常重要的,负责安排其他组件的位置。Frame组件在屏幕上显示为一个矩形区域,作为显示其他组件的容器。4.2.12 Scrollbar滚动条组件 Scrollbar组件是滚动条组件,Scrollbar组件用于滚动一些组件的可见范围,根据方向可分为垂直滚动条和水平滚动条。Scrollbar 组件常常被用于实现文本、画布和列表框的滚动。Scrollbar 组件通常与 Text 组件、Canvas 组件和 Li
9、stbox 组件一起使用,水平滚动条还能跟 Entry 组件配合。4.4 Tkinter字体4.4.1 4.4.1 通过元组表示字体通过元组表示字体通过3个元素的元组,可以表示字体:(font family,size,modifiers)作为一个元组tuple的第一个元素font family是字体名,size为字体大小单位为point;modifiers为包含粗体、斜体、下划线的样式修饰符。4.4 Tkinter字体4.4.2 4.4.2 通过通过FontFont对象表示字体对象表示字体使用tkFont.Font来创建字体。格式如下:ft=tkFont.Font(family=字体名,siz
10、e,weight,slant,underline,overstrike)其中:size为字体大小;weight=bold或normal,bold为粗体;slant=italic或normal,italic为斜体;underline=1或0,1为下划线;overstrike=1或0,1为删除线。ft=Font(family=Helvetica,size=36,weight=bold)4.5 Python事件处理事件处理 所谓事件(event)就是程序上发生的事。例如用户敲击键盘上某一个键或是单击、移动鼠标。而对于这些事件,程序需要做出反应。Tkinter提供的组件通常都有自己可以识别的事件。例如
11、当按钮被单击时执行特定操作或是当一个输入栏成为焦点,而您又敲击了键盘上的某些按键,您所输入的内容就会显示在输入栏内。程序可以使用事件处理函数来指定当触发某个事件时所做的反应(操作)。4.5.1 事件类型事件类型事件类型的通用格式:事件类型必须放置于尖括号内。type描述了类型,例如键盘按键、鼠标单击。modifier用于组合键定义,例如Control、Alt。detail用于明确定义是哪一个键或按钮的事件,例如1表示鼠标左键、2表示鼠标中键、3表示鼠标右键。举例:按下鼠标左键。按下键盘上的A键 同时按下了Control、Shift、A三键。4.5.2 事件绑定程序建立一个处理某一事件的事件处理
12、函数,称之为绑定。1创建组件对象时指定创建组件对象实例时,可通过其命名参数command指定事件处理函数。例def callback():#事件处理函数 showinfo(Python command,人生苦短、我用Python)Bu1=Button(root,text=设置事件调用命令,command=callback)Bu1.pack()2实例绑定调用组件对象实例方法bind可为指定组件实例绑定事件。这是最常用事件绑定方式。组件对象实例名.bind(,事件处理函数)例如假设声明了一个名为canvas的Canvas组件对象,想在canvas上按下鼠标左键时画上一条线,可以这样实现:canva
13、s.bind(,drawline)4.5.2 事件绑定3类绑定将事件与一组件类绑定。调用任意组件实例的.bind_class()函数为特定组件类绑定事件。组件实例名.bind_class(组件类,事件处理函数)4.5.2 事件绑定4程序界面绑定当无论在哪一组件实例上触发某一事件,程序都作出相应的处理。例如您可能会将PrintScreen键与程序中的所有组件对象绑定,这样整个程序界面就能处理打印屏幕的事件了。调用任意组件实例的.bind_all()函数为程序界面绑定事件。组件实例名.bind_ all(,事件处理函数)例如可以这样实现打印屏幕:widget.bind_all(,printScre
14、en)。5标识绑定标识绑定在Canvas画布中绘制各种图形,将图形与事件绑定可以使用标识绑定tag_bind()函数。预先为图形定义标识tag后,通过标识tag来绑定事件。例如:cv.tag_bind(r1,printRect)4.5.2 事件绑定事件处理函数往往带有一个event参数。触发事件调用事件处理函数时,将传递Event对象实例。def callback(event):#事件处理函数 showinfo(Python command,人生苦短、我用Python)【例4-39】触发keyPress键盘事件的例子,运行效果如图4-34所示。开发猜数字游戏开发猜数字游戏【案例】使用tkinter开发猜数字游戏,运行效果如图所示。游戏中电脑随机生成1024以内数字,玩家去猜,如果猜得数字过大过小都会提示,程序要统计玩家猜的次数。