一个最简单的Tkinter程序至少应包含以下4个部分:
导入tkinter模块、创建主窗口、也称root窗口(即根窗口)、添加人机交互控件,同时编写相应的事件函数、通过主循环(mainloop)来显示主窗口。
以上:只有“添加人机交互控件”这个步骤属于Tkinter编程的重点,其余三个步骤属于固定的代码格式,如下:
程序运行结果:
如上图,这个是最简单的GUI程序对应的主窗口,其他的控件都要建立在主窗口之上。
添加一些简单的交互控件(Eg:文本or按钮),代码如下所示:
程序运行结果如下:
以上程序中,添加了一行文本“C语言中文网,欢迎您。”此处使用了Lable控件来实现,需要注意的是,当成功创建标签(文本)对象后,必须使用pack方法将其放置在主窗口内(pack方法又称窗口布局管理器)。
添加按钮的逻辑与添加文本标签类似,值得注意的是,按钮控件通过command参数实现“关闭窗口”功能,代码如下:
设置宽高时,只能使用“x”不能使用“*”
Protocol协议处理机制:
Tkinter除了提供事件绑定机制之外,还提供了协议处理机制,它指的是应用程序和窗口管理器之间的交互,最常用的协议为WM_DELETE_WINDOW,当Tkinter使用WM_DELETE_WINDOW协议与主窗口进行交互时,Tkinter主窗口右上角x号的关闭功能失效,也就是无法通过点击x来关闭窗口,而是转变成调用用户自定义的函数。
设置窗的位置:
当我们运行Tkinter程序时,主窗口都会出现在距离屏幕左上角指定的位置上,这是由Tkinter软件包默认设置的。但在许多情况下,我们需要根据实际情况来移动窗口再电脑屏幕上的位置,通过窗口对象geometry()方法即可改变主窗口的位置,语法格式如下:
上述代码表示,设置主窗口的宽度为 450,高度为 400,同时窗口距离左边屏幕的距离为 300(以像素为单位),距离屏幕顶部的距离为 200,这里我们将带“+”的参数值称为“位置参数”,当然,您也可以将它们设置为负数,如下所示:
当设置了一个超过屏幕的负参数值时,主窗口会被移动至“屏幕之外”,此时就看不到主窗口了,这也是隐藏窗口的一种方法。
Label控件构成:
一个控件主要由背景和前景两部分组成。其中背景由三部分构成分别是内容区域、填充区、边框,这三个区域的大小通过以下属性进行控制,如下所示:width/height、padx/pady、borderwidth
边框的宽度可以通过 borderwidth 来调整,其样式可以通过relief来设置(默认为平的 flat);填充区的大小调整分为水平方向和垂直方向,可以使用padx和pady来调整;内容区则主要用来显示文字或者图片,其大小由 width/height 来控制。
标签添加背景图
Label(标签)除了可以显示文本之外,还可以用来显示图片,通过一组示例做简单的说明,代码如下所示:
注意:不同的 TK 版本所支持的图片格式也不完全相同,通过对上述示例的测试,此处只支持显示 GIF 格式的图片。
按钮控件Button的使用流程:通过command参数回调函数。自定义一个函数或者方法,将函数与按钮关联起来,最后当用户按下这个按钮时,Tkinter就会自动调用相关函数。
使用流程:
扩展:按钮的布局
按钮在主窗口中的布局,通常使用grid()函数来完成,该函数以网络状的形式(行和列)来管理窗口布局。
grid() 布局管理器提供了一个sticky参数,通过该参数可以设置按钮的方位,该参数默认将控件设置居中,其他参数值有 N/S/W/E(上/下/左/右),而且可以组合在一起使用,比如 NW/WE/SE/SW/NE 等,这与anchor参数控制文本的显示位置,有着异曲同工之妙。如下图所示:
值得大家注意的是: grid() 布局方法不能与 pack() 混合在一起使用,相关知识在后续内容中还会做针对性讲解。