IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> Python Tkinter教程(三)——三种几何布局管理器Pack、Place和Grid的所有参数及相关方法及详细用法 -> 正文阅读

[Python知识库]Python Tkinter教程(三)——三种几何布局管理器Pack、Place和Grid的所有参数及相关方法及详细用法

>>>【 上节回顾:Label控件、Frame控件、Button控件的完整参数及详细用法?】<<<

Python Tkinter教程(三)

????????这篇博客将详细并尽可能完整地介绍tkinter模块的3种几何布局管理器Pack、Place和Grid的所有参数及相关方法及详细使用方法,通过示例代码和图片的方式进行详细地教程。

目录

一、Pack方法

【参数说明】

【相关方法】

二、Place方法

【参数说明】?

【相关方法】

三、Grid方法

【参数说明】?

【相关方法】

【总结一下】


一、Pack方法

【Pack方法官方原文:pack manual page - Tk Built-In Commands

【参数说明】

参数描述
after参数为另一个控件,在pack布局另外的那个控件之后再布局该控件
anchor用于确定控件被放置相对于父控件的位置,可选项有'e','s','w','n','sw','se','nw','ne','center',默认为'center'
before参数为另一个控件,在pack布局另外的那个控件之前先布局该控件
expand

指定控件在容器中是否可以扩展,可以是布尔值,可以是0,1或者'no',默认为0【1

fill

用于拉伸控件,可选的style有'none'(默认值,没有拉伸)

'x'(横向拉伸)、'y'(纵向拉伸)和'both'(双向拉伸)

【注:相关选项也可写为大写,如X或Y,此时不是字符串!

side

指定将控件放置相对于父控件在哪一边,可选项是'left'(左)、'right'(右)

'top'(上)和'bottom'(下),默认为'top'

【注:相关选项也可写为大写,如LEFT,此时不是字符串!

ipadx水平的两个方向,控件内部额外添加空间,长度单位为像素
ipady竖直的两个方向,控件内部额外添加空间,长度单位为像素
padx水平的两个方向,控件外部额外添加空间,长度单位为像素
pady竖直的两个方向,控件外部额外添加空间,长度单位为像素
in_指定pack于哪一个父控件,默认为当前父控件

1】如果容器窗口太大,以至于在其所有内容pack后会留下额外的空间,那么额外的空间将均匀分布在为其设置了-expand选项的所有内容中。

【相关方法】

方法名描述
pack_configure和pack一样
pack_forget使控件不再被Pack几何布局管理器管理控件并不是被删除了!依然占用内存!
pack_info返回一个字典,键值分别为当前控件的参数的字符串形式及值
pack_propagate参数如果为真布尔值,如1或on,则为容器控件启用传播(见下几何传播),容器控件必须是窗口名。如果为假布尔值,则禁用容器控件的传播。在这两种情况下,都会返回一个空字符串。如果省略布尔值,则命令返回0或1,以指示当前是否为容器控件启用传播。默认情况下,将启用传播。
pack_slaves

返回一个列表,列表内容为该控件中所有用pack布局的子控件(按pack布局的顺序

一般容器控件才用该方法

pack_content旧版Tkinter中,和pack_slaves()功能相同【新版中貌似已经删去此方法】

几何传播Pack通常会计算一个容器控件(如Frame控件)必须有多大才能完全满足其内容物的需要,并将容器控件的宽度和高度设置为这些尺寸。这会导致几何信息通过窗口层次向上传播到顶层窗口(Toplevel类型的控件),以便整个子树自行调整大小以满足叶窗口的需要。但是,pack_propagate命令可用于关闭一个或多个容器控件的传播。如果传播被禁用,则Pack几何布局管理器将不会设置pack所需的宽度和高度。例如,如果希望容器控件具有指定的固定大小,这可能很有用。

这里推荐一篇写的很好的关于Pack的文章

用tkinter.pack设计复杂界面布局_快乐清风客的博客-CSDN博客_tkinter界面设计

【代码示例】

from tkinter import *

root = Tk()
root.title('Pack方法')
root.geometry('600x600+300+100')

Frame(root,bg='red',width=100).pack(side='left',fill='y',expand='no')
Frame(root,bg='yellow',height=100).pack(side='top',fill='x')
Frame(root,bg='green').pack(expand=1,fill='both')

root.mainloop()

【运行效果】

二、Place方法

【Place方法官方原文:place manual page - Built-In Commands

【参数说明】?

参数描述
anchor

改变place布局控件的基准点,默认为'nw'(左上角)

修改后其x参数和y参数的基准点随之改变

bordermode可选参数有'inside','outside''ignore'默认为'inside'【1
in_同上Pack
relwidth

设置控件宽度,参数为0~1.0,意为宽度占父控件宽度的比例

若父控件宽度为100,relwidth=0.5,则该控件宽度为100×0.5=50(像素)

与参数width冲突,两者会叠加

relheight

设置控件高度,参数为0~1.0,意为高度占父控件高度的比例

若父控件高度为100,relheight=0.5,则该控件高度为100×0.5=50(像素)

与参数height冲突,两者会叠加

relx

设置控件基准点(左上角)横坐标位置,参数为0~1.0,意为横坐标占父控件宽度的比例

若父控件宽度为100,relx=0.5,则该控件基准点横坐标为100×0.5=50(像素)

与参数x冲突,两者会叠加

rely

设置控件基准点(左上角)纵坐标位置,参数为0~1.0,意为纵坐标占父控件高度的比例

若父控件高度为100,rely=0.5,则该控件基准点纵坐标为100×0.5=50(像素)

与参数y冲突,两者会叠加

width设定控件的宽度(单位:像素
height设定控件的高度(单位:像素
x设定控件基准点(左上角)的横坐标位置(单位:像素)
y设定控件基准点(左上角)的纵坐标位置(单位:像素)

1】该参数不常用,要参考的可以看一下官方说明:

(我就不翻译了,嘻嘻,主要是没看太懂,有懂的可以在评论区说一下哦!)

-bordermode mode

whether to take border width of master widget into account

Mode?determines the degree to which borders within the container are used in determining the placement of the content. The default and most common value is?inside. In this case the placer considers the area of the container to be the innermost area of the container, inside any border: an option of?-x 0?corresponds to an x-coordinate just inside the border and an option of?-relwidth 1.0?means?window?will fill the area inside the container's border.

If?mode?is?outside?then the placer considers the area of the container to include its border; this mode is typically used when placing?window?outside its container, as with the options?-x 0 -y 0 -anchor ne. Lastly,?mode?may be specified as?ignore, in which case borders are ignored: the area of the container is considered to be its official X area, which includes any internal border but no external border. A bordermode of?ignore?is probably not very useful.

【相关方法】

方法名描述
place_configure同上pack
place_forget同上pack
place_info同上pack
place_slaves同上pack
place_content同上pack

【代码示例】

from tkinter import *

root = Tk()
root.title('Place方法')
root.geometry('600x600+300+100')

Frame(root,bg='red').place(width=450,height=150)
Frame(root,bg='yellow').place(width=150,height=450,x=450)
Frame(root,bg='blue').place(width=450,height=150,x=150,y=450)
Frame(root,bg='green').place(width=150,height=450,y=150)

root.mainloop()

【运行效果】

三、Grid方法

【Grid方法官方原文:grid manual page - Tk Built-In Commands

【参数说明】?

参数描述
column参数为一个非负整数,0为第1列,代表控件从第一列开始布局
columnspan参数为正整数,控件占n列
row参数为一个非负整数,0为第1行,代表控件从第一行开始布局
rowspan参数为正整数,控件占n行
ipadx同上Pack
ipady同上Pack
padx同上Pack
pady同上Pack
in_同上Pack
sticky

控件在grid布局的网格中默认会居中显示,该参数可以改变其显示位置,

可选参数有'n','w','s'和'e'(或N,W,S,E)(组合起来也可以用,如'nw'或NW)

【相关方法】

方法名描述
grid_configure同上pack
grid_forget同上pack
grid_info同上pack
grid_location两个参数x和y(代表像素位置),以元组形式返回该位置(x,y)在grid的网格中的列与行,若不在,则返回-1
grid_propagate同上pack
grid_columnconfigure

比较复杂,主要用于查询设置网格、网格的行属性等,

可选参数有minsize、weight、uniformpad

具体见官方说明【传送门在上边】

grid_rowconfigure类似于grid_columnconfigure
grid_remove与grid_forget相比,它的功能只有一个区别,在grid几何布局管理移除对该控件的管理后,它会保留该控件之前的配置参数,若恢复管理,则将恢复该控件之前已配置好的参数(grid_forget没有此功能)
grid_size以元组的形式返回网格的大小(先列后行)
grid_slaves同上pack
grid_content同上pack
grid_bbox

如果没有参数,将返回网格的边界框的数据(以像素为单位)。返回值由4个整数组成。前两个是从网格左上角(先x后y)的像素偏移量,后两个整数是网格的宽度和高度,也以像素为单位。

如果指定了单个列和行,则返回该单元格的边界框数据,其中左上角的单元格从零开始编号。

如果同时指定了列和行参数,则返回跨越所示行和列的边界框数据。

【代码示例】

from tkinter import *

root = Tk()
root.title('Grid方法')
root.geometry('600x600+300+100')

Frame(root,bg='red',width=300,height=300).grid(column=0,row=0)
Frame(root,bg='yellow',width=300,height=300).grid(column=0,row=1)
Frame(root,bg='blue',width=300,height=300).grid(column=1,row=0)
Frame(root,bg='green',width=300,height=300).grid(column=1,row=1)

root.mainloop()

【运行效果】


【总结一下】

Pack方法比较简单,可以解决不是非常复杂的图形化界面,但是它只能单一地放置,对于网格化的图形化界面,用Pack就比较繁琐;

Place方法十分精确,它要求了很多参数,能够轻松胜任复杂的图形化界面,但是缺陷也很明显,窗口放大或缩小,Place管理的控件并不能随之改变大小及位置;

Grid方法就是网格,字面意思嘛,它能够很好地应付网格化的图形化界面,但对于复杂且规律不明显的界面而言,Grid方法就显得不太行了;

各有各的优缺点,对于不同的程序我们应该选用合适的几何布局管理器,但是给个小建议,尽量不要在同一个程序中使用不同的几何布局管理器,那样容易把自己弄晕,且代码看起来不清晰。我呢,就比较喜欢用Place了,精确控制控件的大小及位置不就和我们小时候搭积木一样吗?简单容易,就是这个位置坐标有点“费头发”......


>>>【 下节内容:更新中 ... ...?】<<<?

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2022-05-21 18:55:28  更:2022-05-21 18:57:01 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 15:13:32-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码