Tkinter 转载 (来自C语言中文网)

一个最简单的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() 混合在一起使用,相关知识在后续内容中还会做针对性讲解。

相关推荐
yngsqq1 小时前
Addrange的用法
windows
Reese_Cool2 小时前
【Python】数据容器:列表,元组,字符串,集合字典及通用操作
开发语言·windows·python
sukalot5 小时前
Windows 蓝牙驱动开发-蓝牙设备栈
windows·驱动开发
真想骂*5 小时前
黑客发现新漏洞:Windows容器隔离框架可助其绕过端点安全
windows·安全
苦逼IT运维5 小时前
详解 Docker 启动 Windows 容器第二篇:技术原理与未来发展方向
linux·windows·docker
Azure DevOps7 小时前
Azure DevOps Server 完整介绍
运维·microsoft·azure·devops
微软技术栈7 小时前
极客说|Azure AI Agent Service 结合 AutoGen/Semantic Kernel 构建多智能体解决⽅案
人工智能·microsoft·azure
码农君莫笑8 小时前
Blazor程序系统终端用户加载和运行方式研究
microsoft·c#·blazor·发布
也想洒脱9 小时前
windows wsl ubuntu22 远程桌面连接
windows
许泽宇的技术分享9 小时前
深度解读微软Speech服务:让语音识别走进现实
microsoft·语音识别·xcode