我的编程空间,编程开发者的网络收藏夹
学习永远不晚

PythonGUI之tkinter布局管理教程

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

PythonGUI之tkinter布局管理教程

所谓布局,就是指控制窗体容器中各个控件(组件)的位置关系。

tkinter 共有三种几何布局管理器,分别是:

  • pack布局
  • grid布局
  • place布局

pack布局
使用 pack布局,将向容器中添加组件,第一个添加的组件在最上方,然后是依次向下添加。

from tkinter import *
root = Tk()
 
#创建三个 Label 分别添加到root窗体中 
#Label是一种用来显示文字或者图片的组件
Label(root,text = 'pack1',bg = 'red').pack() 
Label(root, text = 'pack2', bg = 'blue').pack() 
Label(root, text = 'pack3', bg = 'green').pack() 
 
root.mainloop()

如图:

pack常用属性

属性名属性简析取值取值说明
fill设置组件是否向水平或垂直方向填充X、Y、BOTH 和NONEfill = X(水平方向填充)fill = Y(垂直方向填充)fill = BOTH(水平和垂直)NONE 不填充
expand设置组件是否展开,当值为YES时,side选项无效。组件显示在父容器中心位置;若fill选项为BOTH,则填充父组件的剩余空间。默认为不展开YES 、NO(1、0)expand=YES expand=NO
side设置组件的对齐方式LEFT、TOP、RIGHT、BOTTOM值为左、上、右、下
ipadx、ipady设置x方向(或者y方向)内部间隙(子组件之间的间隔)可设置数值,默认是0非负整数,单位为像素
padx、pady设置x方向(或者y方向)外部间隙(与之并列的组件之间的间隔)可设置数值,默认是0非负整数,单位为像素
anchor锚选项,当可用空间大于所需求的尺寸时,决定组件被放置于容器的何处N、E、S、W、NW、NE、SW、SE、CENTER(默认值为CENTER)表示八个方向以及中心

注意:上表中取值都是常量,YES等价于"yes",亦可以直接传入字符串值。另外当界面复杂度增加时,要实现某种布局效果,需要分层来实现。

from tkinter import *    #注意模块导入方式,否则代码会有差别
 
class App:
    def __init__(self, master):
        #使用Frame增加一层容器
        fm1 = Frame(master)
        #Button是一种按钮组件,与Label类似,只是多出了响应点击的功能
        Button(fm1, text='Top').pack(side=TOP, anchor=W, fill=X, expand=YES)
        Button(fm1, text='Center').pack(side=TOP, anchor=W, fill=X, expand=YES)
        Button(fm1, text='Bottom').pack(side=TOP, anchor=W, fill=X, expand=YES)
        fm1.pack(side=LEFT, fill=BOTH, expand=YES)
 
        fm2 = Frame(master)
        Button(fm2, text='Left').pack(side=LEFT)
        Button(fm2, text='This is the Center button').pack(side=LEFT)
        Button(fm2, text='Right').pack(side=LEFT)        
        fm2.pack(side=LEFT, padx=10)
        
root = Tk()
root.title("Pack - Example")
display = App(root)
root.mainloop()

如上,创建一个Frame容器fm1,将三个垂直排列的Button组件使用pack布局放入fm1容器中,然后创建fm2容器,同样将三个水平排列的Button组件放入,最后将两个Frame容器当做组件,使用pack布局放入根窗体容器中。

如此分层布局,实现了相对复杂一些的界面需求。

pack类提供了下列函数(使用组件实例对象调用)

函数名描述
pack_slaves()以列表方式返回本组件的所有子组件对象。
pack_configure(option=value)给pack布局管理器设置属性,使用属性(option)= 取值(value)方式设置
propagate(boolean)设置为True表示父组件的几何大小由子组件决定(默认值),反之则无关。
pack_info()返回pack提供的选项所对应得值。
pack_forget()Unpack组件,将组件隐藏并且忽略原有设置,对象依旧存在,可以用pack(option, …),将其显示。
location(x, y)x, y为以像素为单位的点,函数返回此点是否在单元格中,在哪个单元格中。返回单元格行列坐标,(-1, -1)表示不在其中
size()返回组件所包含的单元格,揭示组件大小。

grid布局

grid布局又被称作网格布局,是最被推荐使用的布局。程序大多数都是矩形的界面,我们可以很容易把它划分为一个几行几列的网格,然后根据行号和列号,将组件放置于网格之中。使用grid 布局时,需要在里面指定两个参数,分别用row 表示行,column 表示列。需要注意的是 row 和 column 的序号都从0 开始。

如下图,假设将界面分成网格。


描述

grid属性设置

属性名属性简析取值取值说明
row、columnrow为行号,column为列号,设置将组件放置于第几行第几列取值为行、列的序号,不是行数与列数row 和 column 的序号从0开始,但是,column的默认值是0,row的默认值是下一个编号较大的未占用行号
sticky设置组件在网格中的对齐方式(前提是有额外的空间)N、E、S、W、NW、NE、SW、SE类似于pack布局中的锚选项
rowspan组件所跨越的行数默认值为1取值为跨越占用的行数,而不是序号
columnspan组件所跨越的列数默认值为1取值为跨越占用的列数,而不是序号
ipadx、ipady、padx、pady组件的内部、外部间隔距离,与pack的该属性用法相同同pack同pack

grid类提供了下列函数(使用组件实例对象调用)

函数名描述
grid_slaves()以列表方式返回本组件的所有子组件对象。
grid_configure(option=value)给pack布局管理器设置属性,使用属性(option)= 取值(value)方式设置
grid_propagate(boolean)设置为True表示父组件的几何大小由子组件决定(默认值),反之则无关。
grid_info()返回pack提供的选项所对应得值。
grid_forget()Unpack组件,将组件隐藏并且忽略原有设置,对象依旧存在,可以用pack(option, …),将其显示。
grid_location(x, y)x, y为以像素为单位的点,函数返回此点是否在单元格中,在哪个单元格中。返回单元格行列坐标,(-1, -1)表示不在其中
size()返回组件所包含的单元格,揭示组件大小。

place布局。

最简单最灵活的一种布局,使用组件坐标来放置组件的位置。但是不太推荐使用,在不同分辨率下,界面往往有较大差异。

place属性设置

属性名属性简析取值取值说明
anchor锚选项,同pack布局默认值为 NW同pack布局
x、y组件左上角的x、y坐标整数,默认值0绝对位置坐标,单位像素
relx、rely组件相对于父容器的x、y坐标0~1之间浮点数相对位置,0.0表示左边缘(或上边缘),1.0表示右边缘(或下边缘)
width、height组件的宽度、高度非负整数单位像素
relwidth、relheight组件相对于父容器的宽度、高度0~1之间浮点数与relx(rely)取值相似

bordermode 如果设置为INSIDE,组件内部的大小和位置是相对的,不包括边框;如果是OUTSIDE,组件的外部大小是相对的,包括边框 INSIDE、OUTSIDE(默认值INSIDE) 可以使用常量INSIDE、OUTSIDE,也可以使用字符串形式"inside"、"outside"

place类提供了下列函数(使用组件实例对象调用)

函数名描述
place_slaves()以列表方式返回本组件的所有子组件对象。
place_configure(option=value)给pack布局管理器设置属性,使用属性(option)= 取值(value)方式设置
propagate(boolean)设置为True表示父组件的几何大小由子组件决定(默认值),反之则无关。
place_info()返回pack提供的选项所对应得值。
grid_forget()Unpack组件,将组件隐藏并且忽略原有设置,对象依旧存在,可以用pack(option, …),将其显示。
location(x, y)x, y为以像素为单位的点,函数返回此点是否在单元格中,在哪个单元格中。返回单元格行列坐标,(-1, -1)表示不在其中
size()返回组件所包含的单元格,揭示组件大小。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

PythonGUI之tkinter布局管理教程

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Java Swing组件布局管理器之FlowLayout(流式布局)入门教程

本文实例讲述了Java Swing组件布局管理器之FlowLayout(流式布局)。分享给大家供大家参考,具体如下:FlowLayout应该是Swing布局管理器学习中最简单、最基础的一个。所谓流式,就是内部控件像水流一样,从前到后按顺序水
2023-05-30

Div+CSS布局入门教程之页面布局和规划

页面布局和规划是网页设计的基础,可以通过Div+CSS布局来实现。下面是一个入门教程,介绍如何进行页面布局和规划。1. 确定页面结构:首先,确定网页的整体结构,包括头部、导航栏、内容区域和底部等。可以用HTML的标签来表示不同的区域,如、、
2023-09-22

AndroidUI设计之常用的布局管理器有哪些

Android中常用的布局管理器有以下几种:1. LinearLayout(线性布局):按照水平或垂直方向排列子视图,可以设置权重来实现权重分配。2. RelativeLayout(相对布局):子视图相对于父视图或其他子视图进行定位,可以通
2023-09-21

Android开发教程之电源管理详解

本文实例讲述了Android电源管理。分享给大家供大家参考,具体如下: 一、 相关概念 1. 出于节电的需要,一般应用在用户一段时间无操作的情况下屏幕变暗,然后进入休眠状态 2. 用户只能在”设置->声音和显示”中设置所有应用默认的屏幕亮度
2022-06-06

Java日常练习题之Panel和Applet 的默认布局管理器是什么

这篇文章将为大家详细讲解有关Java日常练习题之Panel和Applet 的默认布局管理器是什么,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。1、在异常处理中,若try中的代码可能产生多种异常则可以对应多
2023-06-20

JVM教程之内存管理和垃圾回收(三)

JVM内存组成结构JVM栈由堆、栈、本地方法栈、方法区等部分组成,结构图如下所示:1)堆所有通过new创建的对象的内存都在堆中分配,其大小可以通过-Xmx和-Xms来控制。堆被划分为新生代和旧生代,新生代又被进一步划分为Eden和Survi
2023-05-31

(Redis基础教程之八) 如何在Redis中管理Sets

本教程说明了如何创建Sets,检索和删除成员以及比较不同Sets的成员。如何使用本指南本指南以备有完整示例的备忘单形式编写。我们鼓励您跳至与您要完成的任务相关的任何部分。本指南中显示的命令已在运行Redis版本4.0.9的Ubuntu 18.04服务器上进行了
(Redis基础教程之八) 如何在Redis中管理Sets
2015-12-21

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录