Python GUI 设计(一)———Tkinter窗口创建、组件布局

2023-11-13

本篇开始介绍用Python的Tkinter模块来设计图形化界面。尽量用简洁的语言和实例让读者能看明白,轻松入门。

1.1 创建窗口

tkinter模块是Pyhton自带的标准GUI库,可以直接导入。导入tkinter模块后,可以使用下面的方法创建一个简单的窗口。其中top是自定义的Tk对象名称,也可以取其他名称,mainloop()方法放在程序最后一行。演示程序及效果可参考下图。

from tkinter import *
top = Tk()  #通过Tk()方法建立一个根窗口
top.mainloop()  #进入等待处理窗口事件

在这里插入图片描述

1.2 设置窗口属性

创建窗口之后,可以通过一系列方法设置窗口样式,包括窗口标题、大小、背景等,下列是窗口相关的方法。
在这里插入图片描述
演示程序及效果可参考下图:

from tkinter import *
top = Tk()  #创建窗口
top.title("智能课堂考勤系统")  #定义窗口名称
top.geometry('500x300')  #设置主窗口大小,注意中间对的符号是小写字母x
#创建文本标签Label,top是第一个参数为父窗口,text是标签内容
#设置位置参数,使用place方法可将控件放在指定位置,
#place()方法中窗口显示区左上角是(0,0),x是向右递增,y是向下递增
Label(top,text = "这是一个标签").place(x = 200,y = 100)  
#创建按钮,text是功能按钮的名称
Button(top,text = "新学生注册").place(x = 220,y = 150)
top.mainloop()

在这里插入图片描述

1.3 Widget组件

1.3.1 Widget组件的分类
Widget中文翻译为组件或者控件,窗口建立后,就可以在窗口里面放置一些组件,可以是文字、按钮等。tkinter模块包含了多种组件,下列是一些常用的组件介绍。
在这里插入图片描述
1.3.2 Widget的共同方法
设计组件时会看到下列常用的共同方法。
在这里插入图片描述

1.4 布局管理

在设计图形用户界面程序时,可以使用三种方法定位各个组件在窗口中的指定位置,这三种方法分别是pack()方法、grid()方法、place()方法。下面对这三种方法进行详细讲解。
1.4.1 pack()方法
pack()方法是使用相对位置的概念处理Widget控件配置的,其语法如下:
pack的语法
上面语法中的widget是需要布局的组件,options为pack()方法的相关参数,参数默认为widget.pack()时,组件按照由上往下显示,其他参数及其函数如下表所示。
在这里插入图片描述
(1)side参数的属性值
在这里插入图片描述
(2)padx/pady参数设定组件边界与窗口边界的距离或是组件边界间的距离。
演示程序及效果参考如下:

from tkinter import *  
top = Tk()
top.title("TK")  #窗口标题
top.geometry("200x150")  #窗口长宽
#标签组件左右边界距离是80,距离窗口或组件的距离为10
Label(top,text = "一是一",bg="red").pack(padx=80,pady=10)
Label(top,text = "二是二",bg="yellow").pack(padx=80,pady=10)
Label(top,text = "三是三",bg="white").pack(padx=80,pady=10)
top.mainloop()

在这里插入图片描述

在演示程序中,标签“一是一”与上边窗口的边界间距为10,但是它与标签“二是二”得间距由于彼此影响所以间距是20,同里“二是二”与“三是三”之间的距离也是20。
(3)fill参数用于设置组件填充所分配空间的方式,它主要有下面4个属性。
在这里插入图片描述
(4)anchor参数表示设置组件在窗口中的位置,具体属性如下图所示。
方位属性
例如在窗口的右下角显示一个标签,演示程序及效果如下图。

from tkinter import *  
top = Tk()
top.title("TK")  #窗口标题
top.geometry("200x100")  #窗口长宽
Label(top,text = "返回",bg="red").pack(anchor = "s" ,side = RIGHT)
top.mainloop()

在这里插入图片描述

1.4.2 grid()方法
grid()方法是一种以格状或者类似Excel电子表格方式包装和定位窗口组件的方法。其语法如下:
grid方法
上面语法中的widget是需要布局的组件,options为grid()方法的相关参数,其参数及说明如下表所示。
在这里插入图片描述
(1)row和column参数的概念可参考下图。
行/列布局
适当调整row和column的值,即可定位窗口组件的位置。演示程序及效果可参考下图。

from tkinter import *  
top = Tk()
top.title("TK")  #窗口标题
top.geometry("200x100")  #窗口长宽
Label(top,text = "一是一",bg="red").grid(row=0,column=0)
Label(top,text = "二是二",bg="yellow").grid(row=0,column=1)
Label(top,text = "三是三",bg="white").grid(row=1,column=0)
top.mainloop()

在这里插入图片描述

(2)grid方法中padx和pady参数的用法与pack方法中的padx和pady参数相同,可直接参考下面的案例。

from tkinter import *  
top = Tk()
top.title("TK")  #窗口标题
top.geometry("200x100")  #窗口长宽
Label(top,text = "一是一",bg="red").grid(row=0,column=0,padx=30,pady=5)
Label(top,text = "二是二",bg="yellow").grid(row=0,column=1,padx=30,pady=5)
Label(top,text = "三是三",bg="white").grid(row=1,column=0,padx=30,pady=5)
Label(top,text = "四是四",bg="pink").grid(row=1,column=1,padx=30,pady=5)
top.mainloop()

在这里插入图片描述

1.4.3 place()方法
place()方法可以设置组件的大小以及组件在窗口中的精确位置,其参数及其含义如下表所示。
在这里插入图片描述
(1)x/y参数
place()方法内的x和y参数可直接设置组件在窗口的左上方位置,单位是像素。窗口显示区的左上角(x=0,y=0),x是向下递增,y是向右递增。演示程序及效果可参考下图。

from tkinter import *  
top = Tk()
top.title("TK")  #窗口标题
top.geometry("200x100")  #窗口长宽
Label(top,text = "一是一",bg="red").place(x=1,y=0)
Label(top,text = "二是二",bg="yellow").place(x=50,y=30)
Label(top,text = "三是三",bg="white").place(x=0,y=60)
top.mainloop()

在这里插入图片描述

(2)width/height参数
这两个参数可以直接设置组件的宽度和高度。设计一个距离窗口左上角水平距离50,距离左上角垂直距离20,组件的宽度50,高度70的标签组件,演示程序及效果可参考下图。

from tkinter import *  
top = Tk()
top.title("TK")  #窗口标题
top.geometry("200x100")  #窗口长宽
Label(top,text = "一是一",bg="yellow").place(x=50,y=20,width=50,height=70)
top.mainloop()

在这里插入图片描述

(3)relwidth/relheight参数
这两个参数可以设置组件大小分别占窗口的比例,进行等比例缩放,取值范围为0~1,演示程序及效果可参考下图。

from tkinter import *  
top = Tk()
top.title("TK")  #窗口标题
top.geometry("200x100")  #窗口长宽
Label(top,text = "一是一",bg="yellow").place(relwidth = 0.8,relheight=0.8)
top.mainloop()

在这里插入图片描述

以上是关于窗口创建、窗口组件布局方法的介绍。接下来会更新多种Widget组件的详细用法~
下一篇是关于Widget组件的详解Python GUI 设计(二)—Widget组件详解

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python GUI 设计(一)———Tkinter窗口创建、组件布局 的相关文章

  • 操作数无法与形状 (128,) (0,) 错误一起广播

    我正在尝试实现面部识别登录系统 但出现错误 操作数无法与形状 128 0 一起广播 我不知道什么或如何解决它 这是我已实现的 view py 和 FaceDetector py 以及我从服务器收到的错误 errors Traceback m
  • 具有多处理功能的 Python 代码无法在 Windows 上运行

    以下简单的绝对初学者代码在 Ubuntu 14 04 Python 2 7 6 和 Cygwin Python 2 7 8 上运行 100 但在 Windows 64 位 Python 2 7 8 上挂起 我使用另一个片段观察到了同样的情况
  • 编辑 scikit-learn 决策树

    我想编辑 sklearn DecisionTree 例如改变条件或切割节点 叶子等 但似乎没有功能可以做到这一点 如果我可以导出到文件 编辑它以导入 如何编辑决策树 环境 Windows 10 python3 3 sklearn 0 17
  • Python 遍历目录树的方法是什么?

    我觉得分配文件和文件夹并执行 item 部分有点黑客 有什么建议么 我正在使用Python 3 2 from os import from os path import def dir contents path contents list
  • Python,将迭代函数变成递归函数

    我创建了一个输出 4 3 2 1 0 1 2 3 4 的迭代函数 def bounce2 n s n for i in range n print n n n 1 if n lt 0 for i in range s 1 print n n
  • Python的reduce()短路了吗?

    If I do result reduce operator and False 1000 得到第一个结果后它会停止吗 自从False anything False 相似地 result reduce operator or True 10
  • conda 无法从 yml 创建环境

    我尝试运行下面的代码来从 YAML 文件创建虚拟 Python 环境 我在 Ubuntu 服务器上的命令行中运行代码 虚拟环境名为 py36 当我运行下面的代码时 我收到下面的消息 环境也没有被创建 这个问题是因为我有几个必须使用 pip
  • 如何在 ReportLab 段落中插入回车符?

    有没有办法在 ReportLab 的段落中插入回车符 我试图将 n 连接到我的段落字符串 但这不起作用 Title Paragraph Title n Page myStyle 我想要这样做 因为我将名称放入单元格中 并且想要控制单元格中的
  • 字典中的列表,Python 中的循环

    我有以下代码 TYPES hotmail type hotmail lookup mixed dkim no signatures S Return Path email protected cdn cgi l email protecti
  • 如何找到列表S的所有分区为k个子集(可以为空)?

    我有一个唯一元素列表 比方说 1 2 我想将其拆分为 k 2 个子列表 现在我想要所有可能的子列表 1 2 1 2 2 1 1 2 我想分成 1 1 2 我怎样才能用 Python 3 做到这一点 更新 我的目标是获取 N 个唯一数字列表的
  • 使用 Scipy imsave 将 Numpy 数组保存到图像时保留未更改的数据

    使用 Scipy 保存二维 Numpy 数组 单个值 时toimage or imsave像素值与 Numpy 数组中的像素值不完全匹配 相反 在某些区域 主要是边缘 图像算法似乎使用某种插值 是否有一个选项可以停止插值并保留准确的数据 例
  • 在Python中创建一个新表

    我正在尝试从数控机床中提取数据 事件每毫秒发生一次 我需要过滤掉一些用管道 分隔的变量分隔符 PuTTy exe 程序生成的日志文件 我尝试阅读熊猫 但列不在同一位置 df pd read table data log sep 日志文件的一
  • str.translate 给出 TypeError - Translate 采用一个参数(给定 2 个参数),在 Python 2 中工作

    我有以下代码 import nltk os json csv string cPickle from scipy stats import scoreatpercentile lmtzr nltk stem wordnet WordNetL
  • Matplotlib 图例不工作

    自从升级 matplotlib 以来 每当尝试创建图例时 我都会收到以下错误 usr lib pymodules python2 7 matplotlib legend py 610 UserWarning Legend does not
  • 一起使用 Flask 和 Tornado?

    我是以下的忠实粉丝Flask 部分是因为它很简单 部分是因为它有很多扩展 http flask pocoo org extensions 然而 Flask 是为了在 WSGI 环境中使用而设计的 而 WSGI 不是非阻塞的 所以 我相信 它
  • Spyder 如何在同一线程的后台运行 asyncio 事件循环(或者确实如此?)

    我已经研究 asyncio 模块 功能几天了 因为我想将它用于我的应用程序的 IO 绑定部分 并且我认为我现在对它的工作原理有一个合理的理解 或者在至少我认为我已经理解了以下内容 任一时刻 任一线程中只能运行一个异步事件循环 一旦一切都设置
  • scipysolve_ivp() 中的访问时间步长

    我有一个常微分方程系统 正在使用 scipy 的solve ivp 函数求解 它运行良好 但我在访问每个步骤中使用的时间步时遇到问题 我知道solve ivp 将当前时间传递给用户定义的函数 但我需要使用的时间步长 而不是当前时间 为了解决
  • 在游戏中实现功能

    我在完成这部分作业时遇到了麻烦 我必须宣布游戏的获胜者 然后输入到函数中 输入所有 if 语句后 我必须创建一个函数def playGame 这必须包括 showRules user getUserChoice computer getCo
  • 从数据集的给定日期范围中提取属于一天的数据

    我有一个数据集 日期范围为 2018 年 1 月 12 日到 8 月 3 日 其中包含一些值 维数为my df数据框是 my df shape 9752 2 每行包含半小时频率 第一行开始于2018 01 12 my df iloc 0 D
  • 从 pandas 数据框中绘制堆积条形图

    我有数据框 payout df head 10 复制以下 Excel 绘图的最简单 最智能和最快的方法是什么 我尝试过不同的方法 但无法让一切都到位 Thanks 如果您只想要一个堆积条形图 那么一种方法是使用循环来绘制数据框中的每一列 并

随机推荐

  • 右键菜单调用命令行

    新建文档 Windows Registry Editor Version 5 00 HKEY CLASSES ROOT Folder shell CmdPrompt cmd here HKEY CLASSES ROOT Folder she
  • DELL戴尔笔记本电脑灵越Inspiron 14 5410&5418原厂Win10系统恢复原装OEM出厂状态系统

    Dell戴尔笔记本电脑 灵越Inspiron 14 5410 5418原装出厂OEM系统镜像原厂系统文件 系统自带所有驱动 出厂主题壁纸LOGO Office办公软件等预装程序 链接 https pan baidu com s 1Qj dW
  • C++ 核心编程

    一 内存分区模型 C 程序在执行时 将内存大方向划分为4个区域 代码区 存放函数体的二进制代码 由操作系统进行管理 全局区 存放全局变量和静态变量以及常量 栈区 由编译器自动分配释放 存放函数的参数值 局部变量等 堆区 由程序员分配和释放
  • 基于STM32的ESP8266获取天气数据(HAL库)

    一 介绍 进入主题 下图正是购买的esp8266模块 对于esp01 引脚图如下 二 刷固件 在使用AT指令时 有时候会无法进入AT模式 也就是在串口发送指令 无应答 除了检查引脚和TTL模块是否接错 还可能是需要刷固件 在接线时要注意TT
  • View移动(scrollTo()、scrollBy()方法)

    源码 View java public void scrollTo int x int y if mScrollX x mScrollY y int oldX mScrollX int oldY mScrollY mScrollX x mS
  • 其实UE4资料很丰富

    除了303个shader外 还有program里面的例子
  • QMap & QHash基础应用

    include
  • 神文!高校教授跑了一个月外卖写下这篇文,几千万浏览量,5万+评论

    省时查报告 专业 及时 全面的行研报告库 省时查方案 专业 及时 全面的营销策划方案库 免费下载 2023年7月份全网热门报告合集 ChatGPT提词示例 让你的ChatGPT聪明100倍 超百页干货资料 AI应用的难点 痛点与未来 202
  • 每一个都能笑抽的 39 个奇葩代码注释

    素材来源 网络 1 只有上帝知道 我写这一行的时候 只有上帝和我知道我在写什么 现在 只有上帝知道了 2 相隔时空的 diss somedev1 6 7 02 添加对登录屏幕的暂时追踪功能 somedev2 5 22 07 暂时个屁 仿佛看
  • 在vscode中配置python的安装环境

    一 首先需要下载python版本和vscode的版本 这个需要自己根绝电脑的操作系统进行配置 1 python安装官网 https www python org downloads 但是官网下载很慢 所以可以放到迅雷中进行下载 或者这个也能
  • 【OSS】【Py】OSS出现The specified key does not exist问题

    今天接口的OSS模块出现异常 Exception status 404 x oss request id 5C50209BAE509FEEA16D753E details Code NoSuchKey Message The specifi
  • win10 cpu虚拟化打不开

    win10 cpu 虚拟化打不开 重启进入windows 的bios界面 一共需要调整两处Intel Virtualization Technology 一个在advance下 另一个在advance下的cpu设置里面 两个都设置为enab
  • 软件测试题目汇总

    软件缺陷 1 软件未实现产品说明书要求的功能 2 软件出现了产品说明书指明不应该出现的错误 3 软件实现了产品说明书未提到的功能 4 软件未实现产品说明书虽未明确提及但应该实现的目标 5 软件难以理解 不易使用 运行缓慢或者从测试员的角度看
  • 爬取天眼查 的python 代码

    Description 天眼查关键词爬取风险信息 Author bessie lina Date 2019 08 14 17 39 30 LastEditTime 2019 08 30 16 32 13 LastEditors Please
  • docker 安装fileBrowser

    fileBrowser 是一个 Web 文件浏览器 它更类似于一个网盘服务器 使我们可以在浏览器中访问服务器上的文件资源 同时 fileBrowser 还支持添加多个用户 并为不同的用户设置不同的访问权限 除此之外 fileBrowser
  • Eclipse添加注释的快捷键alt+shift+j

    http www cnblogs com xuedexin articles 5658346 html
  • [464]Outlook如何备份邮件

    如何在outlook中添加新账户 点击outlook菜单栏上的 文件 选项 可以看到主界面右侧有一个 添加账户 的选项 点击 添加账户 进入其设置界面 这里有三大选项 请选择 手动设置服务器设置或其他服务器类型 点击下一步 进入 选择服务
  • vue3+vite快速配置eslint的踩坑

    前言 本文强调快速配置eslint 所以不使用下载依赖包和配置的方式进行eslint配置 而是使用现有的eslint自动化构建的包进行快速配置 无论是新项目要集成eslint还是已经开发了一段时间的项目中途要加入eslint都可以按文章中的
  • Linux笔记&Linux常用指令合集

    1 Linux文件结构 linux的目录中有且只有一个根目录 linux的各个目录存放的内容是规划好 不能乱放文件 linux是以文件的形式管理我们的设备 因此linux系统 一切皆为文件 bin Binary的缩写 用来存放常用命令的 比
  • Python GUI 设计(一)———Tkinter窗口创建、组件布局

    本篇开始介绍用Python的Tkinter模块来设计图形化界面 尽量用简洁的语言和实例让读者能看明白 轻松入门 1 1 创建窗口 tkinter模块是Pyhton自带的标准GUI库 可以直接导入 导入tkinter模块后 可以使用下面的方法