Python中Tkinter布局管理grid的使用

目录
  • 何时使用 grid 管理器?
  • 用法
  • 方法

pack、grid 和 place 均用于管理同在一个父组件下的所有组件的布局,其中:

pack 是按添加顺序排列组件grid 是按行/列形式排列组件place 则允许程序员指定组件的大小和位置

何时使用 grid 管理器?

grid 管理器可以说是 Tkinter 这三个布局管理器中最灵活多变的。如果你只希望学习使用一个布局管理器,那么 grid 绝对是首选。当你在设计对话框的时候,使用 gird 尤其便捷。如果你此前一直在用 pack 构造窗口布局,那么学习完 grid 你会悔恨当初为啥不早学它。使用一个 grid 就可以简单的实现你用很多个框架和 pack 搭建起来的效果。

注意:不要在同一个父组件中混合使用 pack 和 grid,因为 Tkinter 会很认真地在那儿计算到底先使用那个布局管理器......以至于你等了半个小时,Tkinter 还在那儿纠结不出结果!

用法

使用 grid 排列组件,只需告诉它你想要将组件放置的位置(行/列,row 选项指定行,cloumn 选项指定列)。此外,你并不用提前指出网格(grid 分布给组件的位置称为网格)的尺寸,因为管理器会自动计算。

import tkinter as tk

root = tk.Tk()

# column 默认值是 0
tk.Label(root, text="用户名").grid(row=0)
tk.Label(root, text="密码").grid(row=1)

tk.Entry(root).grid(row=0, column=1)
tk.Entry(root, show="*").grid(row=1, column=1)

root.mainloop()

默认情况下组件会居中显示在对应的网格里,你可以使用 sticky 选项来修改这一特性。该选项可以使用的值有 "e","w","s","n"(ewsn 分别表示东西南北,即上北下南左西右东)以及它们的组合。因此,我们可以通过 sticky = "w" 使得 Label 左对齐:

tk.Label(root, text="用户名").grid(row=0, sticky="w")
tk.Label(root, text="密码").grid(row=1, sticky="w")

有时候你可能需要用几个网格来放置一个组件,可以做到吗?当然可以,你只需要指定 rowspan 和 columnspan 就可以实现跨行和跨列的功能:

import tkinter as tk

root = tk.Tk()

# column 默认值是 0
tk.Label(root, text="用户名").grid(row=0, sticky="w")
tk.Label(root, text="密码").grid(row=1, sticky="w")

tk.Entry(root).grid(row=0, column=1)
tk.Entry(root, show="*").grid(row=1, column=1)

photo = tk.PhotoImage(file="logo.gif")
tk.Label(root, image=photo).grid(row=0, column=2, rowspan=2, padx=5, pady=5) #rowspan=2 跨两行

tk.Button(text="提交", width=10).grid(row=2, columnspan=3, pady=5) #columnspan=3 跨三列

root.mainloop()

方法

注:下边所有方法适用于所有组件

grid(**options)
-- 下方表格详细列举了各个选项的具体含义和用法:

选项 含义
column 1. 指定组件插入的列(0 表示第 1 列)
2. 默认值是 0
columnspan 指定用多少列(跨列)显示该组件
in_ 1. 将该组件放到该选项指定的组件中
2. 指定的组件必须是该组件的父组件
ipadx 指定水平方向上的内边距
ipady 指定垂直方向上的内边距
padx 指定水平方向上的外边距
pady 指定垂直方向上的外边距
row 指定组件插入的行(0 表示第 1 行)
rowspan 指定用多少行(跨行)显示该组件
sticky 1. 控制组件在 grid 分配的空间中的位置
2. 可以使用 "n", "e", "s", "w" 以及它们的组合来定位(ewsn代表东西南北,上北下南左西右东)
3. 使用加号(+)表示拉长填充,例如 "n" + "s" 表示将组件垂直拉长填充网格,"n" + "s" + "w" + "e" 表示填充整个网格
4. 不指定该值则居中显示

grid_bbox(column=None, row=None, col2=None, row2=None)
-- 返回一个 4 元组描述该组件所在的限定矩形-- 如果指定 column 和 cow 参数,则返回该位置(column, cow)的组件的限定矩形描述
-- 如果指定 4 个参数,则返回从(column, cow)到(col2, row2)所有组件的限定矩形描述
-- 例如 grid_bbox(0, 0, 1, 1) 返回的是 4 个组件所在的限定矩形

grid_columnconfigure(index, **options)
-- 设置列的属性
-- 注意:设置的是该组件所拥有的 grid 的列
-- 可以设置的选项及含义如下:

选项 含义
minsize 指定该列的最小宽度
pad 指定该列中最大网格的水平边距
weight 1. 指定列与列之间的相对距离
2. 默认值是 0
3. 这个你比较难理解,小甲鱼还是详细解说下:初创建窗口的时候,grid 会自动根据组件的尺寸分配窗口的尺寸,当你拉伸窗口的尺寸时就会有空白显示出来。这个选项正是指定列与列之间是否填充空白,默认是不填充的。另外,该选项的值是指定填充空白的倍数,例如 weight = 2 的列会比 weight = 1 的列填充多一倍的空白。所以需要平均填充的话,只需要所有的列都设置 weight = 1 即可。

grid_configure(**options)
-- 跟 grid() 一样

grid_forget()
-- 将组件从屏幕中“删除”
-- 并没有销毁该组件,只是看不到了
-- 可以通过 grid 或其他布局管理器显示已“删除”的组件,但该组件所在网格的选项设置不会恢复

grid_info()
-- 以字典的形式返回当前 grid 的选项

grid_location(x, y)
-- 返回位于(或接近)给定坐标(x, y)的网格位置
-- 返回值是一个 2 元组表示网格对应的(列,行)

grid_propagate(flag)
-- 如果开启,父组件会自动调节尺寸以容纳所有子组件
-- 默认值是开启(flag = True)
-- 该方法仅适用于父组件

grid_remove()
-- 跟 grid_forget() 一样,但恢复的时候会记住该组件所在网格的选项设置

grid_rowconfigure(index, **options)
-- 设置行的属性
-- 注意:设置的是该组件所拥有的 grid 的行
-- 可以设置的选项及含义如下:

选项 含义
minsize 指定该行的最小高度
pad 指定该列中最大网格的垂直边距
weight 1. 指定行与行之间的相对距离
2. 默认值是 0
3. 这个你比较难理解,不懂可以参考上边 grid_columnconfigure() 的详细解释

grid_size()
-- 返回该组件所拥有的 grid 的尺寸
-- 返回值是一个 2 元组,表示(列, 行)分别的网格数

grid_slaves(row=None, column=None)
-- 以列表的形式返回该组件的所有子组件
-- 该方法仅适用于父组件

到此这篇关于Python中Tkinter布局管理grid的使用的文章就介绍到这了,更多相关Python Tkinter grid内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Python tkinter的grid布局及Text动态显示方法

    在python中gui编程有很多中选择,如果是相对简单的gui的话使用python自带的tkinter即可,但是由于tkinter没有详细的API文档,要使用起来比较麻烦,而且不够美观,如果是要求比较高的gui编程,推荐使用PyQt或者wxpython. 我在这里主要说一下tkinter中3种布局方式中的grid布局,在之前写个比较简单的软件的时候遇到了写问题,在此记录下来. 1. grid中的一些参数:需要声明的是,行列大小由该列/行中最大组件大小所决定!! column: 对应的放置的所在的

  • Python中Tkinter布局管理grid的使用

    目录 何时使用 grid 管理器? 用法 方法 pack.grid 和 place 均用于管理同在一个父组件下的所有组件的布局,其中: pack 是按添加顺序排列组件grid 是按行/列形式排列组件place 则允许程序员指定组件的大小和位置 何时使用 grid 管理器? grid 管理器可以说是 Tkinter 这三个布局管理器中最灵活多变的.如果你只希望学习使用一个布局管理器,那么 grid 绝对是首选.当你在设计对话框的时候,使用 gird 尤其便捷.如果你此前一直在用 pack 构造窗口

  • Python中tkinter的用户登录管理的实现

    内容 编写一个用户登录管理程序,设计窗体的布局,制定密码规则和验证码规则.要求使用 Python 标准库 tkinter 编写基于GUI 的用户登录窗体.通过该窗体,用户输入用户名.密码和验证码等信息,确认登录后需要判断用户信息是否合法,并弹出对应的反馈信息.通过判断用户是否在用户信息中,以及输入密码是否与用户信息文件中用户名所对应的密码是否相同,来判断用户是否合法.此外,新用户还可以进行注册,注册需要输入用户名.密码.手机号和身份证号等信息.注册时密码需要遵循一定规则(长度不小于8且含有数字.

  • python的tkinter布局之简单的聊天窗口实现方法

    本文实例展示了一个python的tkinter布局的简单聊天窗口.分享给大家供大家参考之用.具体方法如下: 该实例展示的是一个简单的聊天窗口,可以实现下方输入聊天内容,点击发送,可以增加到上方聊天记录列表中.现在只是"单机"版. 右侧预留了空位可以放点儿其它东西.感兴趣的读者可以进一步做成socket双方互聊. 以下是功能代码部分: from Tkinter import * import datetime import time root = Tk() root.title(unic

  • 使用Python中tkinter库简单gui界面制作及打包成exe的操作方法(二)

    上一篇我们写了怎么将xmind转换成想要的excel格式,这篇再讲一下用Python自带的tkinter库设计一个简单的gui界面,让我们的xmind路径,用例版本执行等都通过这个gui界面来输入,生成我们需要的excel文件. Python要生成gui,库还是比较多的比如wxpython,这个我看了下,感觉比较难懂,毕竟只是设计一个比较简单的gui界面,所以就使用了tkinter库,感觉这个还是比较方便易懂的,大家可以在这里学习tkinter库http://c.biancheng.net/py

  • python中tkinter的应用:修改字体的实例讲解

    参考链接:tkinter book font字体的参数有如下6个 family: 字体类别,如'Fixdsys' size: 作为一个整数,以点字体的高度.为了获得字体的n个像素高,使用-n. weight: "BOLD" 表示加粗, "NORMAL" 表示正常大小,默认是NORMAL slant:斜体(默认正常), "NORMAL"表示正常,"ITALIC"表示字体倾斜 underline:下划线,1表示添加下滑线,0表示没

  • python中Tkinter实现分页标签的示例代码

    Tkinter实现UI分页标签显示: Input页,红色部分为当前Frame的位置,下半部分为第一页的子标签:三页标签的显示内容各不相同.实现分页显示的核心组件为Radiobutton,Radiobutton只有一个选项能够生效,使用参数indicatoron=0能够将Radiobutton显示为Button的形状,通过选定的Radiobutton将原有的Frame forget掉,同时,将预定的Frame pack,实现分页的效果.使用时要将更换的组件放入一个Frame中,定义一个函数进行选定

  • Python中tkinter+MySQL实现增删改查

    一.设置主窗口 # -*- coding: utf-8 -*- import tkinter from tkinter import ttk import pymysql # 导入消息对话框子模块 import tkinter.messagebox # 创建主窗口 root = tkinter.Tk() root.title('告警查询') # 设置窗口大小 root.minsize(500,500) tabControl = ttk.Notebook(root) tab1 = ttk.Fram

  • python中tkinter复选框使用操作

    代码如下所示: # tkinter复选框操作 import tkinter as tk root = tk.Tk() root.title('问卷调查') root.geometry('220x80') # 设置窗口大小 flag_1 = False flag_2 = False flag_3 = False list_content = ['你的爱好是:'] hobby_list = ['游泳', '唱歌', '旅游'] def click_1(): global flag_1 flag_1

  • Python中Tkinter组件Frame的具体使用

    目录 何时使用 Frame 组件? 用法 参数 Frame(框架)组件是在屏幕上的一个矩形区域.Frame 主要是作为其他组件的框架基础,或为其他组件提供间距填充. 何时使用 Frame 组件? Frame 组件主要用于在复杂的布局中将其他组件分组,也用于填充间距和作为实现高级组件的基类. 用法 Frame 组件可以用于装饰界面: import tkinter as tk master = tk.Tk() tk.Label(text="天王盖地虎").pack() separator

  • 使用Python中Tkinter模块的Treeview 组件显示ini文件操作

    前言: Tkinter模块的Treeview组件类似于Dev中的treelist控件,但前者还可以当做树控件和表格控件使用,虽然功能可能没有dev和winform控件那么强大,但是在Tkinter中算是比较复杂.用处较多的了. Treeview组件位于ttk模块,该模块自Tk8.5开始引入,如果 Python 未基于 Tk 8.5 编译,只要安装了 Tile 仍可访问本模块.Treeview支持按层次结构展示一组数据项,用excel做了个简单的示意图(如下所示),Treeview 组件左侧可以理

随机推荐