
1、tkinter基本概念1-1 认识GUI和tkinterGUI英文全称是Graphical User Interface中文为图形用户接口。早期人与计算机之间的沟通是文字形式的沟通例如早期的DOS操作系统、Windows的命令提示符窗口、Linux系统等等。本系列主要说明如何设计图形用户接口以让用户可以与计算机进行沟通并介绍使用Python内附的tkinter模块设计相关程序。tkinter是一个开放源码的图形接口开发工具原来是用TCL(Tool Command Language工具命令语言)编写的GUI函数库最初发展是从1991年开始具有跨平台的特性可以在Linux、Windows、Mac OS等操作系统上执行。这个tkinter工具提供许多图形接口例如标签Label、菜单Menu、按钮Button等。目前这个tkinter工具已经移植到Python语言属于Python语言内建的模块在Python2版本中该模块名称是tkinter在Python3版本中该模块被称为tkinter模块。在按照python时就已经同时安装此模块了在使用前只需要导入此模块即可如下所示。from tkinter import *之后我们就可以使用此模块的工具设计多样化的GUI程序了。软件版本变化很快在正式进入python的tkinter模块前首先介绍如何了解自己的tkinter版本。程序实例ch1_0列出tkinter模块。import tkinter print(tkinter.TkVersion)1-2 建立窗口可以使用下列方法建立窗口。root Tk() # root是自定义的Tk对象名称也可以取其他名称 root.mainloop() # 放在程序最后一行通常将使用Tk()方法建立的窗口称为根窗口之后可以在此根窗口中建立许多控件也可以在此根窗口中建立上层窗口。本例中使用root当作对象名称大家也可以自行取其它名称。上述mainloop()方法可以让程序继续执行同时进入等待与处理窗口事件单击窗口右上方的“关闭”按钮此程序才会结束。程序实例ch1_1建立空白窗口窗口默认名称是tk。from tkinter import * root Tk() root.mainloop()执行结果上述窗口大小是默认大小可以拖曳移动窗口或更改窗口大小。注意在GUI程序设计中有时候也将上述所建立的窗口window称为容器container。1-3 窗口属性的设置下列是与窗口相关的方法。方法说明title()可以设置窗口的标题geometry(width×heightxy)设置窗口宽width与高height单位是像素pixel设定窗口位置maxsize(width, height)拖拽时可以设置窗口最大的宽(width)与高(height)minsize(width, height)拖拽时可以设置窗口最小的宽(width)与高(height)configure(bgcolor)设置窗口的背景颜色resizable(True, True)可设置是否更改窗口大小第一个参数是宽第二个参数是高如果要固定窗口宽与高可以使用resizable(0, 0)state(zoomed)最大化窗口iconify()最小化窗口iconbitmap(xx.ico)更改默认窗口图标程序实例ch1_2设置窗口标题为MyWindow同时设置宽是300高是160.from tkinter import * root Tk() root.title(MyWindow) root.geometry(300x160) root.configure(bgyellow) root.mainloop()执行结果上述第7行使用bg设置了窗口背景颜色。除了可以使用名称直接设置色彩还可以使用十六进制方式设置色彩RGB其中每隔色彩用两个十六进制数字表示。程序ch1_3使用mystar.ico更改系统默认的图标同时使用另一种更改背景颜色的方法。from tkinter import * root Tk() root.configure(bg#00ff00) root.iconbitmap(mystar.ico) root.mainloop()1-4 窗口位置的设置geometry()方法除了可以设置窗口的大小也可以设置窗口的位置此时它的语法格式如下。geometry(width×heightxy)上述width x height已说明是窗口的宽和高width与height用x分隔。其中“x”表示x是窗口左边距离屏幕左边的距离如果是“-x”则表示x是窗口右边距离屏幕右边的距离。“y”表示y是窗口上边距离屏幕上边的距离如果是“-y”则表示y是窗口下边距离屏幕下边的距离。程序实例ch1_4建立一个300 x 160大小的窗口此窗口左上角坐标是(400200)。from tkinter import * root Tk() root.geometry(300x160400200) root.mainloop()Python是一个很灵活的程序语言可参考下列实例。程序实例ch1_5重新设计geometry()方法大家可以自行判断使用哪一种方式建立窗口与设置窗口位置。from tkinter import * root Tk() w 300 h 160 x 400 y 200 root.geometry(%dx%d%d%d %(w, h, x, y)) root.mainloop()在tkinter模块中可以使用下列方法获得屏幕的宽度和高度。screenwidth root.winfo_screenwidth() # 屏幕宽度 screenheight root.winfo_screenheight() # 屏幕高度程序实例ch1_6设计窗口同时将此窗口放在屏幕中央。from tkinter import * root Tk() screenWidth root.winfo_screenwidth() screenHeight root.winfo_screenheight() w 300 h 160 x (screenWidth - w) / 2 y (screenHeight - h) / 2 root.geometry(%dx%d%d%d %(w, h, x, y)) root.mainloop()1-5 认识tkinter的Widget1-5-1 tkinter的WidgetWidget可以翻译为控件或组件或部件窗口建立完成后下一步是在窗口内建立控件我们将这些控件统称为Widget。(1) Button(按钮)可参考第4章。(2) Canvas(画布)可参考第19章。(3) Checkbutton(多选按钮)可参考7-2节。(4) Entry(文本框)可参考第5章。(5) Frame(框架)可参考8-1节。(6) Label(标签)可参考第2章。(7) LabelFrame(标签框架)可参考8-2节。(8) Listbpx(列表框)可参考第12章。(9) Menu(菜单)可参考第16章。(10) MenuButton(菜单按钮)已经过时的控件已经被Menu()取代。(11) Message(消息)可参考10-1节。(12) OptionMenu(下拉式菜单)可参考第13-1节。(13) PanedWindow(画板)可参考第14-1节。(14) Radiobutton(单选按钮)可参考7-1节。(15) Scale(尺度)可参考9-1节。(16) Scrollbar(滚动条)可参考12-8节。(17) Spinbox(可微调输入控件)可参考9-2节。(18) Text(文字区域)可参考第17章。(19) Toplevel(上层窗口)可参考8-3节。1-5-2 加强版的tkinter模块tkinter在后来也退出了加强版的模块称为tkinter.ttk有时简称ttk。下列是原本tkinter有的Widget。(1) Button(2) Checkbutton(3) Entry(4) Frame(5) Label(6) LabelFrame(7) MenuButton(8) Radiobutton(9) Scale(10) Scrollbar(11) PanedWindow下列是ttk模块新增的Widget。(1) Combobox可参考第13-2节。(2) Notebook可参考第14-2节。(3) Progressbar可参考第15章。(4) Separator可参考2-16节。(5) Sizegrip可以拖曳最上层窗口右下方更改最上层窗口的大小。(6) Treeview可参考第18章。导入上述模块可以使用下列方式。from tkinter import ttk如果使用下列方式导入ttk可以覆盖原先tkinter的控件from tkinter import * from tkinter.ttk import *使用ttk可以有更好的外观而且也可以跨平台使用不过并没有100%兼容。例如fg、bg参数或一些外观相关的参数tk和ttk是不相同。ttk使用的是ttk.Style类别。1-6 Widget的共同属性设计控件时会看到下列共同属性。Dimensions大小相关应用可参考2-3节。Colors颜色相关应用可参考2-2节。Fonts字形相关应用可参考2-6节。Anchor锚位置参考点相关应用可参考2-4节。Relief styles属性边框相关应用可参考2-10节。Bitmaps显示位图相关应用可参考2-8节。Cursors鼠标外形相关应用可参考2-14节。1-7 Wdiget的共同方法下列是Widget的共同方法1. Configurationconfig(optionvalue) # widget属性可以在建立时设置也可以在程序执行时使用config()重新设置 cget(option) # 取得option参数值 key() # 可以用此方法获得所有该widget的参数2.Event Processingmainloop() # 让程序继续执行同时进行等待与处理窗口事件 quit() # Python shell窗口结束但是所建窗口继续执行 update() # 更新窗口画面3.Event callbacksbind(event, callback) # 事件绑定 unbind(event) # 解除绑定4.Alarm handlesafter(time, callback) # 间隔指定时间后调用callback()方法