美文网首页
tkinter 布局

tkinter 布局

作者: 三千焱炎火丶 | 来源:发表于2018-08-26 14:56 被阅读0次

    总结 tkinter 三种布局的基本用法。

    由于是第一次尝试 tkinter,如果有错误还请大家指出

    place

    最容易理解,使用最麻烦的布局。

    通过指定控件的绝对位置(或于父控件的相对位置)来布局

    所有的控件都可以使用.place(x, y)来放置(x 和 y 是控件左上角的位置,其中参数widthheight 是可选的)

    Example(绝对布局): 使用 x, y, height, width 直接指定位置和宽高

    from tkinter import *
    
    root = Tk()
    # 在 root 面板上创造一个 label 控件,内容为“学号”,字体大小为 20
    label1 = Label(root, text='学号:', font=20)
    # 将这个 label 控件放于距离左边和上面都是 50 的位置
    label1.place(x=50, y=50)
    root.mainloop()
    
    

    Example(相对布局): 使用 relx, rely, relheight, relwidth 指定相对比例的宽高

    from tkinter import *
    
    root = Tk()
    label1 = Label(root, text='学号:', font=20)
    # 以控件的最右(EAST)为基准,将控件放在水平方向最右,竖直方向中间的位置
    label1.place(relx=1.0, rely=0.5, anchor=E)
    root.mainloop()
    
    

    效果

    1.png 2.png

    pack

    最常用的布局,不需要指定具体位置,而是使用 RIGHT LEFT TOP BOTTOM 来放置新的控件,

    由于是一个个连续放置的。因此,可以通过设置控件边距来实现复杂的效果。

    Example(从右往左连续放置)

    from tkinter import *
    
    root = Tk()
    # 生成一个 400 * 150 大小的窗口
    root.geometry("400x150")
    # 生成五个 label 内容分别是 1,2,3,4,5 字体颜色是白色的
    label1 = Label(root, text='1', fg="white", bg="#557097", height=3, width=6)
    label2 = Label(root, text='2', fg="white", bg="#610814", height=3, width=6)
    label3 = Label(root, text='3', fg="white", bg="#030c2d", height=3, width=6)
    label4 = Label(root, text='4', fg="white", bg="#a9a9a9", height=3, width=6)
    label5 = Label(root, text='5', fg="white", bg="#6a3906", height=3, width=6)
    # 将这5个label全部从右往左放在root中
    label1.pack(side=RIGHT)
    label2.pack(side=RIGHT)
    label3.pack(side=RIGHT)
    label4.pack(side=RIGHT)
    label5.pack(side=RIGHT)
    root.mainloop()
    
    

    效果

    3.png

    Example(使用 fill,内边距和外边距)

    label1.pack(side=RIGHT)
    label2.pack(side=RIGHT, fill=Y) # 2号块 填充Y轴
    label3.pack(side=RIGHT, padx=20) # 3号块 X轴上外边距20
    label4.pack(side=RIGHT, ipadx=20) # 4号块 X轴上内边距20
    label5.pack(side=RIGHT)
    

    效果

    4.png

    grid

    Grid 相比于 pack 在很多场景下有着不可替代的作用,例如计算器、相册。通常用来呈现方格块的布局。

    相比于 Pack 的单方向流式布局,Grid 使用一个行列结构来定位每一个元素

    相比于 Place 的固定位置,Grid 可以使用内外边距

    Example(3x3)

    from tkinter import *
    
    root = Tk()
    # 生成9个格子
    for i in range(9):
        # 设置每个格子的背景颜色和字体属性
        if i % 2 == 0:
            font_color = "white"
            background_color = "#d1d1d1"
        else:
            font_color = "black"
            background_color = "#fafafa"
        label = Label(root, text=str(i + 1), fg=font_color, bg=background_color, height=5, width=7)
        # 将格子放在合适的位置
        label.grid(row=i // 3, column=i % 3)
    root.mainloop()
    
    

    效果

    5.png

    参考资料

    python之Tkinter控件学习
    Tkinter 教程12 布局管理 (Pack Place Grid)

    相关文章

      网友评论

          本文标题:tkinter 布局

          本文链接:https://www.haomeiwen.com/subject/cbjoiftx.html