tkinter窗口布局pack方法详解
0️⃣前言
此文章代码都在Github:3-窗口控件配置管理员/pack方法别忘了⭐️呀
做一个应用程序,肯定需要更多的widget控件,所以这时候就牵扯到了如何将这些widget控件配置到 容器 或 窗口 内。在设计GUI程序时,可以使用三种方法包装和定为各组件在 容器 或 窗口 内的位置,这三个方法又称窗口控件配置管理员(Widget Layout Manager),通常叫做布局方法。
一共有三种布局方法:pack、grid和place,最常用的是pack方法,本章介绍pack方法
窗口控件配置管理员
- 前言
- side参数
- padx/pady参数
- ipadx/ipady参数
- anchor参数
- fill参数
- expand参数
- pack参数
pack方法的语法格式如下
***.pack(options, ...)
options参数可以是如下属性:
- side
- fill
- padx/pady
- ipadx/ipady
- anchor
下面将详细说明
1️⃣side参数
可以垂直或水平配置控件,可以设置控件的排列顺序
#coding:UTF-8
#ch1.pyfrom tkinter import *root = Tk()
root.title("普通设置控件")Label(root, text="Tkinter", bg="lightyellow").pack()
#第一个标签
#这些标签不需要保存在变量中,设置好直接布局
Label(root, text="wxPython", bg="lightgreen").pack()Label(root, text="PyQt", bg="lightblue").pack()root.mainloop()
如果窗口中有多个控件,pack会自动让控件从上往下排列显示,这是默认设置。也可以使用side参数改变排列方式,此参数取值如下
- TOP:默认值,由上往下排列
- BOTTOM:由下往上排列
- LEFT:从左往右排列
- RIGHT:从右往左排列
重新改造,使用side,并让标签的宽度都为15
#coding:UTF-8
#ch2.py --ch1.py 2.0from tkinter import *root = Tk()
root.title("普通设置控件")Label(root, text="Tkinter", bg="lightyellow", width=15).pack(side=BOTTOM)
#第一个标签
#这些标签不需要保存在变量中,设置好直接布局
Label(root, text="wxPython", bg="lightgreen", width=15).pack(side=BOTTOM)Label(root, text="PyQt", bg="lightblue", width=15).pack(side=BOTTOM)root.mainloop()
再改成LEFT
#coding:UTF-8
#ch3.py -- ch2.py->side->LEFTfrom tkinter import *root = Tk()
root.title("普通设置控件")Label(root, text="Tkinter", bg="lightyellow", width=15).pack(side=LEFT)
#第一个标签
#这些标签不需要保存在变量中,设置好直接布局
Label(root, text="wxPython", bg="lightgreen", width=15).pack(side=LEFT)Label(root, text="PyQt", bg="lightblue", width=15).pack(side=LEFT)root.mainloop()
混合使用side
#coding:UTF-8
#ch4.py -- ch3.py->side->混合使用from tkinter import *root = Tk()
root.title("普通设置控件")Label(root, text="Tkinter", bg="lightyellow", width=15).pack()
#第一个标签
#这些标签不需要保存在变量中,设置好直接布局
Label(root, text="wxPython", bg="lightgreen", width=15).pack(side=RIGHT)Label(root, text="PyQt", bg="lightblue", width=15).pack(side=LEFT)root.mainloop()
2️⃣padx / pady参数
可以使用padx/pady参数设定控件边界与容器(可以想成窗口边界)的距离或是控件边界间的距离。在默认环境下窗口控件间的距离是 1 像素,如果希望有适度间距,可以设置padx/pady,代表水平间距/垂直间距
实例:
#coding:UTF-8
from tkinter import *root = Tk()
root.title("relief")Label(root, text="flat", relief="flat").pack(side=LEFT, pady=5, padx=4, ipadx=10, ipady=10)
Label(root, text="groove", relief="groove").pack(side=LEFT, pady=5, padx=4, ipadx=10, ipady=10)
Label(root, text="raised", relief="raised").pack(side=LEFT, pady=5, padx=4, ipadx=10, ipady=10)
Label(root, text="ridge", relief="ridge").pack(side=LEFT, pady=5, padx=4, ipadx=10, ipady=10)
Label(root, text="solid", relief="solid").pack(side=LEFT, pady=5, padx=4, ipadx=10, ipady=10)
Label(root, text="sunken", relief="sunken").pack(side=LEFT, pady=5, padx=4, ipadx=10, ipady=10)root.mainloop()
用relief参数实现各种标签的边框,ipadx和ipady等会讲,运行结果
3️⃣ipadx / ipady参数
ipadx/ipady是调整内部距离的,padx/pady是调整外部距离的,还是刚才的程序运行结果,再次分析
4️⃣anchor参数
可以设定Widget控件在窗口中的位置,参数如下
实例:
#coding: UTF-8
#ch7.py anchor
from tkinter import *
root = Tk()
root.title("ch7.py")
root.geometry("300x180")
okbtn = Button(root, text="OK",font="Times 20 bold",fg="white", bg="blue")
okbtn.pack(anchor=S, side=RIGHT,padx=10, pady=10)
root.mainloop()
原本书中写的是Label的,因为这个是鉴于刚学了Label其他的都不知道的同学看的,我觉得既然是OK,Button更好一些吧
那么再加上一个NO键是不是更好?
#coding: UTF-8
#ch8.py anchor + NO BTN
from tkinter import *
root = Tk()
root.title("ch7.py")
root.geometry("300x180")
okbtn = Button(root, text="OK",font="Times 20 bold",fg="white", bg="blue")
okbtn.pack(anchor=S, side=RIGHT,padx=10, pady=10)
nobtn = Button(root, text = "NO",font="Times 20 bold",fg="white", bg="red")
nobtn.pack(anchor=S, side=RIGHT,pady=10)
root.mainloop()
5️⃣fill参数
此参数是告诉pack管理程序,设置控件填满所分配容器区间的方式,如果是fill=X
表示控件可以填满所分配空间X轴不留白,反之亦然,如果是fill=BOTH
表示控件可以填满所分配空间的X轴和Y轴。fill的默认值是None,表示保持原始大小。
实例:(改编第一个ch1.py)
#coding:UTF-8
#ch9.py fill
from tkinter import *root = Tk()
root.title("普通设置控件")Label(root, text="Tkinter", bg="lightyellow").pack(fill=X)
#第一个标签
#这些标签不需要保存在变量中,设置好直接布局
Label(root, text="wxPython", bg="lightgreen").pack()Label(root, text="PyQt", bg="lightblue").pack(fill=X)root.mainloop()
如果所分配容器空间已经满了,则使用fill没有任何作用,将wxPython那个标签设置为.pack(fill=Y)
不会有任何效果。
6️⃣expand参数
expand参数可设定Widget控件是否填满额外的父容器空间,默认是False(或0),表示不填满,如果是True(或是1)则填满。这很重要!
不管怎么设置fill参数,其结果都没有填满整个窗口,于是expand隆重出场!
#coding:UTF-8
#ch9.py fill
from tkinter import *root = Tk()
root.title("expand")Label(root, text="Tkinter", bg="lightyellow").pack(side=LEFT, fill=Y)
#第一个标签
#这些标签不需要保存在变量中,设置好直接布局
Label(root, text="wxPython", bg="lightgreen").pack(fill=X)Label(root, text="PyQt", bg="lightblue").pack(fill=BOTH, expand=True) #设置可以变化root.mainloop()
#coding:UTF-8
#ch9.py fill
from tkinter import *root = Tk()
root.title("expand")Label(root, text="Tkinter", bg="lightyellow").pack(side=LEFT, fill=Y)
#第一个标签
#这些标签不需要保存在变量中,设置好直接布局
Label(root, text="wxPython", bg="lightgreen").pack(fill=BOTH, expand=True)Label(root, text="PyQt", bg="lightblue").pack(fill=BOTH, expand=True) #设置可以变化root.mainloop()
7️⃣pack参数
- forget()——隐藏Widget控件,可以用
pack(option, ...)
复原 - info()——传回pack选项的对应值
- size()——传回Widget控件的大小
- …………更多问度娘
tkinter窗口布局pack方法详解相关推荐
- python布局管理_Python基础=== Tkinter Grid布局管理器详解
本文转自:https://www.cnblogs.com/ruo-li-suo-yi/p/7425307.html @ 箬笠蓑衣 Grid(网格)布局管理器会将控件放置到一个二维的表 ...
- cmd中怎么打开计算机,如何打开命令行窗口?电脑打开cmd命令行窗口5大方法详解...
现在,电脑已经成为了我们日常工作和生活的必需品了,所以学习一些知识还是很有必要的.比如说如何打开命令行窗口?如果你也不太会的话,可以一起来学习一下电脑打开cmd命令行窗口5大方法详解吧! 方法一: 1 ...
- python grid函数_(转)Python Tkinter Grid布局管理器详解
Grid(网格)布局管理器会将控件放置到一个二维的表格里.主控件被分割成一系列的行和列,表格中的每个单元(cell)都可以放置一个控件. 什么时候使用Grid管理器 grid管理器是Tkinter里面 ...
- 猎豹浏览器怎么设置允许弹出窗口 允许弹窗设置方法详解
频频出现的广告弹窗,让不少人选择打开所用浏览器的弹窗拦截功能.不过,此举也带来了一点小麻烦,那就是容易误伤"友军",一些必要的弹窗也会被强制拦截!那么,该怎么解决这一问题呢?下面小 ...
- python画简单的图形的代码-Python实现画图软件功能方法详解
概述 虽然Python的强项在人工智能,数据处理方面,但是对于日常简单的应用,Python也提供了非常友好的支持(如:Tkinter),本文主要一个简单的画图小软件,简述Python在GUI(图形用户 ...
- python画图代码大全-Python实现画图软件功能方法详解
概述 虽然Python的强项在人工智能,数据处理方面,但是对于日常简单的应用,Python也提供了非常友好的支持(如:Tkinter),本文主要一个简单的画图小软件,简述Python在GUI(图形用户 ...
- python画图软件是哪个_Python实现画图软件功能方法详解
Python实现画图软件功能方法详解,按钮,事件,绑定,快捷键,直线 Python实现画图软件功能方法详解 易采站长站,站长之家为您整理了Python实现画图软件功能方法详解的相关内容. 概述 虽然P ...
- python接收邮件内容启动程序_Python实现发送与接收邮件的方法详解
本文实例讲述了Python实现发送与接收邮件的方法.分享给大家供大家参考,具体如下: 一.发送邮件 这里实现给网易邮箱发送邮件功能: import smtplib import tkinter cla ...
- android组件用法说明,Android第三方控件PhotoView使用方法详解
Android第三方控件PhotoView使用方法详解 发布时间:2020-10-21 15:06:09 来源:脚本之家 阅读:74 作者:zhaihaohao1 PhotoView的简介: 这是一个 ...
最新文章
- Linux有问必答:如何安装autossh
- 【Android 热修复】热修复原理 ( 类加载机制 | PathClassLoader 加载 Dex 机制 | PathDexList 查找 Class 机制 | 类查找的顺序机制 )
- 使用 netfilter 处理IPv6报文
- 基于实时计算Flink版的场景解决方案demo
- [vue] 说说你对vue组件的设计原则的理解
- 乱想想关于捕获异常后继续执行的实现。
- python中元祖 字典 列表的区别_Python中元祖,列表,字典的区别
- 华三服务器收集系统日志,Rsyslog+H3C日志系统(示例代码)
- python3 xlsxwiter模块插入matplotlib保存到io.BytesIO中的图
- CAN总线波特率的计算方法
- 实战总结的7个C程序,好东西不私藏
- 计算机网络技术ui设计,UI设计小白到大神的进阶之路—入门基础篇
- 关于Unable to read additional data from server sessionid 0x0问题的解决
- Blender3.0一些建模技巧与应用
- android 工具 拓扑图,GitHub - AndroidHelper/graph.editor: HTML5拓扑图编辑器
- 温度报警器c语言课程设计,综合电子设计课程设计实验报告-可调温度报警器.doc...
- 采集同花顺android数据,同花顺对比app排行榜数据_SZ300033_乌龟量化
- webpack性能优化全方案
- DeFi总锁仓金额突破36亿美元, OKEx赋能DeFi大盘点
- ettercap局域网内DNS欺骗(隔壁的哥们轻一点 ...)
热门文章
- 外部 DTD: 无法读取外部 DTD ‘mybatis-generator-config_1_0.dtd‘, 因为 accessExternalDTD 属性设置的限制导致不允许
- 鸿蒙系统有哪些型号可以尝鲜,支持数十款机型!鸿蒙系统尝鲜计划出炉,荣耀用户要失望了...
- 【免费开放源码】审批类小程序项目实战(活动历史页面)
- 如何恢复Linux中的误删文件
- 网站被百度飓风算法2.0命中,已做完整改措施,看看几天恢复
- WACV2020:开源基于深度学习方法DeOccNet用来去除透视光场中的前景遮挡
- springboot在线教育学习系统在线视频点播系统毕业设计毕设作品开题报告开题答辩PPT
- Word加载EndNote插件
- 华为云workerman超时ERR_CONNECTION_TIMED_OUT
- 3dm显卡测试软件,3DMark新版发布:全球第一个DirectX 12测试工具
- python布局管理_Python基础=== Tkinter Grid布局管理器详解