Python 图形界面框架TkInter(第八篇:理解pack布局)

前言

tkinter图形用户界面框架提供了3种布局方式,分别是

1、pack

2、grid

3、place

介绍下pack布局方式,这是我们最常用的布局方式,理解了pack布局,绝大多数需求都能满足。

第一次使用pack()

import tkintermy_window = tkinter.Tk()my_window.geometry('400x200')hello_world_label = tkinter.Label(my_window, text="Hello World", bg='red')hello_world_label.pack()my_window.mainloop()

实际效果:

创建的Label对象,使用pack布局摆放,可以看到它默认位于窗口的顶部,且位置居中,pack()方法的默认方式就是如此

再创建一个控件,再次使用pack()

import tkintermy_window = tkinter.Tk()my_window.geometry('400x200')hello_world_label = tkinter.Label(my_window, text="Hello World", bg='red')hello_world_label.pack()second_label = tkinter.Label(my_window, text="我是第二个控件", bg="yellow")second_label.pack()my_window.mainloop()

实际效果:

我们可以看到第2个控件位于第1个控件的后面,且也是居中位置,如果你仔细观察,我创建的每个控件,为其传入的第一个参数都是my_window,这将引出我们今天的第一个重要概念,每次创建控件时,传入的第一个参数表示什么?

创建控件的第一个位置参数表示什么?

hello_world_label = tkinter.Label(my_window, text="Hello World", bg='red')
second_label = tkinter.Label(my_window, text="我是第二个控件", bg="yellow") 

每次创建控件时,传入的第1个位置参数,表示当前创建的控件要放置在哪,被放置的地方就被称为父容器,这个概念非常重要。在本文例子中,传入的my_window为Tk对象,Tk对象表示当前窗口,所以我们的每一个控件都放置在当前窗口中,当前的Tk对象则为父容器

控件的实际空间

 上文中,我创建了两个控件,控件本身的大小为内容的大小,红色背景的控件刚好包裹住内容:Hello World,黄色背景的控件刚好包裹住文本内容:我是第二个控件,此时红色背景与黄色背景都表示各自控件的实际空间

看不见的独占空间

这是pack布局方式另外一个重要的概念,我称为看不见的独占空间,红色箭头指向的地方,即一整行,都是Hello World控件的独占空间,它会占据父容器的整行或者整列空间,这也是第二个控件直接出现在下一行的原因,因为上面的一整行都被Hello World控件所独占了,只不过我们看不到!

从上到下排列控件

pack(),表示从上到下的在父容器中摆放控件,每个控件独占父控件的一整行

pack(side="top"),side关键字参数在这里第一次出现,当我们使用pack()时,side的默认值为"top"

改变控件在独占空间中的位置

import tkintermy_window = tkinter.Tk()my_window.geometry('400x200')hello_world_label = tkinter.Label(my_window, text="Hello World", bg='red')hello_world_label.pack(anchor='w')second_label = tkinter.Label(my_window, text="我是第二个控件", bg="yellow")
second_label.pack()my_window.mainloop()

实际效果:

 整行都是Hello World控件在父容器中的独占空间,控件本身可以选择在它的独占空间中的位置,此时使用的关键字参数为anchor,anchor="w",w表示西,所以控件的位置变更到左侧!

看不见的剩余空间

 看见画的绿线了嘛?这是Hello World控件在父容器中没有使用的空间,它称为剩余空间,那么如何才能用到这部分剩余空间呢?

使用剩余空间

使用pack()的fill关键字,传入字符串'x'即可

import tkintermy_window = tkinter.Tk()my_window.geometry('400x200')hello_world_label = tkinter.Label(my_window, text="Hello World", bg='red')hello_world_label.pack(anchor='w', fill='x')second_label = tkinter.Label(my_window, text="我是第二个控件", bg="yellow")
second_label.pack()my_window.mainloop()

实际效果: 

使用剩余空间后,控制的位置功能失效

hello_world_label = tkinter.Label(my_window, text="Hello World", bg='red')

hello_world_label.pack(anchor='w', fill='x')

 虽然pack方法使用了anchor关键字参数,但是文本已经居中了,Hello World控件又变得居中了?那我如果想让文本还是靠左呢?

hello_world_label = tkinter.Label(my_window, text="Hello World", bg='red', anchor="w") hello_world_label.pack(anchor='w', fill='x')

Label对象也有个anchor关键字参数,此时只需要anchor='w'即可靠左,其实它还支持这些参数: n, ne, e, se, s, sw, w, nw, or center,当然必须是字符串,如果你英文不错,你会发现它们都是英文的缩写,除了center(居中)

加深理解

理解父容器、实际空间、独占空间、剩余空间、只要你理解了它们的含义和使用,就理解了pack方式

一个控件放置在哪个控件的里面,哪个控件就是父容器

实际空间是控件本身的大小

独占空间则是占用父容器的空间

剩余空间则是除了实际空间外,没有使用的独占空间

 

从左到右的布局

 

import tkintermy_window = tkinter.Tk()my_window.geometry('400x200')hello_world_label = tkinter.Label(my_window, text="Hello World", bg='red')hello_world_label.pack(side='left')second_label = tkinter.Label(my_window, text="我是第二个控件", bg="yellow")second_label.pack(side='left')my_window.mainloop()

仅需要修改pack()的side关键字参数值为’left'即可从左到右的布局,当前控件会占据父容器的整列空间

pack的四种布局方向

1、从上到下

second_label.pack(side='top')

2、从下到上

second_label.pack(side='bottom')

3、从左到右

second_label.pack(side='left')

4、从右到左

second_label.pack(side='right')

只需要改变pack()方法的side关键字参数,即可改变布局方向,而布局方向则是作用在父容器中

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/89933.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

6. CSS(三)

目录 一、盒子模型 (一)网页布局的本质 (二)盒子模型组成 (三)边框(border) (四)表格的细线边框 (五)内边距(padding…

Android多屏幕支持-Android12

Android多屏幕支持-Android12 1、概览及相关文章2、屏幕窗口配置2.1 配置xml文件2.2 DisplayInfo#uniqueId 屏幕标识2.3 adb查看信息 3、配置文件解析3.1 xml字段读取3.2 简要时序图 4、每屏幕焦点 android12-release 1、概览及相关文章 AOSP > 文档 > 心主题 > 多屏…

【数据结构】栈与队列

1 栈 1.1 栈的概念及结构 栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出 LIFO (Last In First Out) 的原则。 压栈:栈…

【Git】

Git 简介下载安装验证安装 简介 Git 是一个分布式版本控制系统,用于跟踪和管理软件开发项目的变化。它可以有效地记录文件的修改历史、协调多人协作开发、解决代码冲突,并提供了分支管理、版本回滚等功能,使团队能够更好地合作开发软件项目。…

Android实现超出固定行数折叠文字“查看全文“、“收起全文“

先上效果图 分析问题 网上有很多关于这个的代码,实现都过于复杂了,github上甚至还看到一篇文章600多行代码,结果一跑起来全是bug。还是自己写吧!!! 如果我们需要换行的"查看全文"、"收起全…

8.14 作业 ARM

.text .globl _gcd_gcd:mov r0,#9mov r1,#15cmp r0,r1 比较r0和r1寄存器中的值beq stopsubhi r0,r0,r1subcc r1,r1,r0stop:b stop .end用for循环实现1~100之间和: .text .globl _start_start:mov r0,#0 总和mov r1,#1 从1开始mov r2,#100 到100结束bl add_loopa…

安装elasticsearch

一、docker安装elasticsearch 1、下载镜像 docker pull elasticsearch:6.5.4 2、启动容器 docker run -p 9200:9200 -p 9300:9300 --name elasticsearch \ -e "discovery.typesingle-node" \ -e "cluster.nameelasticsearch" \ -e "ES_JAVA_OPTS-Xm…

软件测试基础篇——Docker

1、docker技术概述 docker描述:docker是一项虚拟化的容器技术(类似于虚拟机),docker技术给使用者提供一个平台,在该平台上可以利用提供的容器,对每一个应用程序进行单独的封装隔离,每一个应用程…

IC人必看| 模拟IC方向面试常考问题及答案汇总(二)

有不少小伙伴说还想要更多模拟IC方向的面试题目,这不就来了!(文末可领全部面试题目) 1. Bandgap 里有几种反馈?原理是? 正反馈和负反馈。 2. 负反馈种类?负反馈的优点? 种类&am…

【深度学习】【风格迁移】Zero-shot Image-to-Image Translation

论文:https://arxiv.org/abs/2302.03027 代码:https://github.com/pix2pixzero/pix2pix-zero/tree/main 文章目录 Abstract1. Introduction相关工作3. Method Abstract 大规模文本到图像生成模型展示了它们合成多样且高质量图像的显著能力。然而&#x…

代码质量检查工具SonarQube

Devops流水线之SonarQube 文章目录 Devops流水线之SonarQube1. 软件功能介绍及用途2. 软件环境搭建与使用2.1 使用方法2.2 SonarQube相关属性说明2.3 Sonar配置文件内容说明 3. 使用环节4. 检查方法 1. 软件功能介绍及用途 SonarQube是一个用于代码质量管理的开源平台&#xf…

网络安全进阶学习第十五课——Oracle SQL注入

文章目录 一、Oracle数据库介绍二、Oracle和MySQL的语法差异:三、Oracle的数据库结构四、Oracle的重点系统表五、Oracle权限分类1、系统权限2、实体权限3、管理角色 六、oracle常用信息查询方法七、联合查询注入1、order by 猜字段数量2、查数据库版本和用户名3、查…

项目知识点记录

1.使用druid连接池 使用properties配置文件: driverClassName com.mysql.cj.jdbc.Driver url jdbc:mysql://localhost:3306/book?useSSLtrue&setUnicodetrue&charsetEncodingUTF-8&serverTimezoneGMT%2B8 username root password 123456 #初始化链接数…

Syncfusion Essential Edit for WPF Crack

Syncfusion Essential Edit for WPF Crack 在任何WPF应用程序中启用语法高亮显示。 Syncfusion Essential Edit for WPF是一款具有所有基本功能的编辑器,如文本编辑、剪切、复制和粘贴。它允许用户从各种文件格式打开文件并将其保存为各种文件格式。Syncfusion Esse…

Streamlit项目: 轻松搭建部署个人博客网站

文章目录 1 前言1.1 探索 Streamlit:轻松创建交互式应用1.2 最全 Streamlit 教程专栏 2 我的个人博客网站已上线!2.1 一个集成了智能中医舌诊-中e诊专栏的博客网站2.2 前期准备2.3 使用 Streamlit Cloud 运行 3 知识点讲解3.1 实现多页面:两种…

黑马项目一阶段面试 项目介绍篇

我完成了一个外卖项目,名叫苍穹外卖,是跟着黑马程序员的课程来自己动手写的。 项目基本实现了外卖客户端、商家端的后端完整业务。 商家端分为员工管理、文件上传、菜品管理、分类管理、套餐管理、店铺营业状态、订单下单派送等的管理、数据统计等&…

chatGPT应用于房地产行业

作为 2023 年的房地产专业人士,您无疑认识到技术对行业的重大影响。近年来,一项技术进步席卷了世界——人工智能。人工智能彻底改变了房地产业务的各个方面,从简化管理任务到增强客户互动。 在本文中,我们将探讨几种巧妙的人工智…

命令提示符之操作基础(Windows)

打开命令提示符 方法一 打开指定文件的文件夹,在路径栏里输入“cmd”,回车,就进入控制台了。默认路径就是指定文件夹的路径。 方法二 打开指定的文件夹,按住shift键,在空白处右击,在菜单栏中选择“在此处打…

力扣 322. 零钱兑换

题目来源:https://leetcode.cn/problems/coin-change/description/ C题解(来源代码随想录):题目中说每种硬币的数量是无限的,可以看出是典型的完全背包问题。动规五部曲分析如下: 确定dp数组以及下标的含义…

Synopsys EDA数字设计与仿真

参考如下文章安装Synopsys EDA开发工具 https://blog.csdn.net/tugouxp/article/details/132255002?csdn_share_tail%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%22132255002%22%2C%22source%22%3A%22tugouxp%22%7D Synopsys EDA工具的结构 下…