分享

python 布局管理器pack、 grid、 place

 石旭明文摘 2020-03-14

一、概述
…一个 GUI 应用程序必然有大量的组件,这些组件如何排布? 这时候,就需要使用 tkinter提供的布局管理器帮助我们组织、 管理在父组件中子组件的布局方式。 tkinter 提供了三种管理器: pack、 grid、 place。
二、grid 布局管理器
grid 表格布局, 采用表格结构组织组件。 子组件的位置由行和列的单元格来确定, 并且可以跨行和跨列, 从而实现复杂的布局。
在这里插入图片描述
示例

from tkinter import *
from tkinter import messagebox
import random
class Application(Frame):
def __init__(self, master=None):
super().__init__(master) # super()代表的是父类的定义, 而不是父类
对象
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, sticky=EW)
Button(self, text="取消").grid(row=2, column=2, sticky=E)
if __name__ == '__main__':
root = Tk()
root.geometry("400x90+200+300")
app = Application(master=root)
root.mainloop()

运行结果
在这里插入图片描述
三、pack 布局管理器
pack 按照组件的创建顺序将子组件添加到父组件中, 按照垂直或者水平的方向自然排布。 如果不指定任何选项, 默认在父组件中自顶向下垂直添加组件。
pack 是代码量最少, 最简单的一种, 可以用于快速生成界面。
在这里插入图片描述
在这里插入图片描述
【小灰灰建议】 如上列出了 pack 布局所有的属性, 但是不需要挨个熟悉, 了解基本的即可。pack 适用于简单的垂直或水平排布, 如果需要复杂的布局可以使用 grid 或 place。
【示例】 pack 布局用法, 制作钢琴按键布局
在这里插入图片描述

#coding=utf-8
from tkinter import *
root = Tk();root.geometry("700x220")
#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,20):
Button(f2,width=5,height=10,bg="black" if i%2==0 else
"white").pack(side="left")
root.mainloop()

四、place 布局管理器
place 布局管理器可以通过坐标精确控制组件的位置, 适用于一些布局更加灵活的场景。
在这里插入图片描述
在这里插入图片描述
示例

#coding=utf-8
from tkinter import *
root = Tk();root.geometry("500x300")
root.title("布局管理 place");root["bg"]="white"
f1 = Frame(root,width=200,height=200,bg="green")
f1.place(x=30,y=30)
Button(root,text="小灰灰").place(relx=0.5,rely=0,
x=100,y=200,relwidth=0.2,relheight=0.2)
Button(f1,text="小灰灰牛逼").place(relx=0.6,rely=0.7)
Button(f1,text="小灰灰真牛逼").place(relx=0.2,rely=0.2)
root.mainloop()

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多