【tkinter学习笔记 - 5】:布局管理器(grid、pack、place)

目录

一、grid布局管理器

grid()方法提供的选项

通过grid布局-实现计算器软件界面

二、pack布局管理器

pack()方法提供的几个重要选项 

pack布局--制作钢琴按钮

三、place布局管理器 

place()方法的选项 


一、grid布局管理器

一个GUI应用程序必然有大量的组件,这些组件如何排布?这时候就需要使用tkinter提供的布局管理器帮助我们组织,管理再父组件中子组件的布局方式,tkinter提供了三种管理器:pack、grid、place 

grid表格布局,采用表格结构组织组件,子组件的位置由行和列的单元格确定,并且可以跨行和跨列,从而实现复杂的布局。 

grid()方法提供的选项

选项说明取值范围
column单元格的列号从0开始的正整数
columnspan跨列、跨越的列数正整数
row单元格的行号从0开始的正整数
rowspan跨行、跨越的列数正整数
ipadx、ipady设置子组件之间的间隔,x方向或者y方向,默认单位为像素 非浮点数,默认0.0
padx、pady与之并列的组件之间的间隔,x方向或者y方向,默认单位为像素非浮点数,默认0.0
sticky组件紧贴所在单元格的某一角,对应于东南西北种以及四个角

"N"、"S"、"W"、"E"、"NW"、

"SW"、"SE"、"NE"、"center"(默认)

代码演示

from tkinter import *
import tkinter as tk


class Application(tk.Frame):
    def __init__(self, master=None):
        tk.Frame.__init__(self,master)
        self.master = master
        self.pack()

        self.createWidget()

    def createWidget(self):
        '''通过grid布局实现登录界面'''
        self.label01 = Label(self, text='用户名')
        self.label01.grid(row=0, column=0)
        self.entry01 = Entry(self)
        self.entry01.grid(row=0, column=1)
        Label(self, text='用户名为手机号').grid(row=0, column=2)

        Label(self, text='密码').grid(row=1, column=0)
        Entry(self, show='*').grid(row=1, column=1)

        Button(self, text='登录').grid(row=2, column=1, stick=EW)
        Button(self, text='取消').grid(row=2, column=2, stick=E)

if __name__ == '__main__':
    root = Tk()
    root.geometry('300x100+200+300')
    root.title('登录系统')
    app = Application(root)
    root.mainloop()
  •  运行结果

通过grid布局-实现计算器软件界面

from tkinter import *
import tkinter as tk


class Application(tk.Frame):
    def __init__(self, master=None):
        tk.Frame.__init__(self, master)
        self.master = master
        self.pack()

        self.createWidget()

    def createWidget(self):
        '''通过grid布局实现计算器的界面'''
        btnText = (('MC', 'M+','M-','MR'),
                   ('C', '±', '÷', '×'),
                   (7, 8, 9, '-'),
                   (4, 5, 6, '+'),
                   (1, 2, 3, '='),
                   (0, '.'),
                   )

        Entry(self).grid(row=0, column=0, columnspan=4, pady=10)

        for rindex,r in enumerate(btnText):
            for cindex,c in enumerate(r):
                if c == '=':
                    Button(self, text=c, width=2).grid(row=rindex + 1, column=cindex, rowspan=2, sticky=NSEW)
                elif c == 0:
                    Button(self, text=c, width=2).grid(row=rindex + 1, column=cindex, columnspan=2, sticky=NSEW)
                elif c == '.':
                    Button(self, text=c, width=2).grid(row=rindex + 1, column=cindex+1, rowspan=2, sticky=NSEW)
                else:
                    Button(self, text=c, width=2).grid(row=rindex+1, column=cindex, sticky=NSEW)

if __name__ == '__main__':
    root = Tk()
    root.title('计算器界面')
    root.geometry('200x230+200+300')
    app = Application(root)
    root.mainloop()
  •  运行结果


二、pack布局管理器

pack按照组件的创建顺序将子组件添加到父组件中,按照垂直或者水平的方向自然排布,如果不指定任何选项,默认在父组件中自顶向下垂直添加组件。

pack是代码量最少,最简单的一种,可以用于快速生成界面。

pack()方法提供的几个重要选项 

名称描述数值范围
fill填充x(y)方向上的空间,当属性side=“top”或“bottom”时,填充x方向;当属性side=“left”或“right”时填充y方向;当expend选项为“yes”时,填充父组件的剩余空间“x”、“y”、“both”、“none”(默认值为none)
ipadx、ipady设置子组件之间的间隔,x方向或者y方向,默认单位为像素 非浮点数,默认0.0
padx、pady与之并列的组件之间的间隔,x方向或者y方向,默认单位为像素非浮点数,默认0.0
side定义停留在父组件的哪一边“top”、“bottom”、“left”、“right”(默认值为“top”)
anchor对齐方式,左对齐“w”,右对齐“e”、顶对齐“n”、低对齐“s”“N”、“S”、“W”、“E”、“NW”、“SW”、“SE”、“NE”、“center”(默认)

pack布局--制作钢琴按钮

from tkinter import *

root = Tk()
root.geometry('700x220')
root.title('钢琴按键')

# Frame是一个矩形区域,就是用来放置其他子组件
f1 = Frame(root)
f1.pack()
f2 = Frame(root)
f2.pack()

btnText = ('流行风','中国风','日本风','重金属','轻音乐')

for txt in btnText:
    Button(f1, text=txt).pack(side='left', padx=10)

for i in range(1,13):
    Button(f2, width=5, height=10, borderwidth=1, relief='solid',
          bg='black' if i%2==0 else 'white').pack(side='left', padx=2)

root.mainloop()
  •  运行结果


三、place布局管理器 

 place 布局管理器可以通过坐标精确控制组件的位置,适用于一些布局更加灵活的场景。

place()方法的选项 

选项说明取值范围
x、y组件左上角的绝对坐标(相对于窗口)

非负整数

x和y选项用于设置偏移(像素),如果同时设置 relx(rely) 和 x(y) 那么place将优先计算relx和rely,然后再实现x和y指定的偏移值 

relx、rely组件左上角的坐标(相对于父容器)

relx是相对于父组件的位置,0是最左边,0.5是正中间,1是最右边;

rely是相对于父组件的位置,0是最左边,0.5是正中间,1是最右边;

width、height组件的宽度和高度非负数
rewidth、reheight组建的宽度和高度与relx、rely取值类似,但是相对于父组件的尺寸
anchor对齐方式,左对齐“w”,右对齐“e”、顶对齐“n”、低对齐“s”“N”、“S”、“W”、“E”、“NW”、“SW”、“SE”、“NE”、“center”(默认)

  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

街 三 仔

你的鼓励是我创作的最大动力~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值