一、概述
…一个 GUI 应用程序必然有大量的组件,这些组件如何排布? 这时候,就需要使用 tkinter提供的布局管理器帮助我们组织、 管理在父组件中子组件的布局方式。 tkinter 提供了三种管理器: pack、 grid、 place。
二、grid 布局管理器
grid 表格布局, 采用表格结构组织组件。 子组件的位置由行和列的单元格来确定, 并且可以跨行和跨列, 从而实现复杂的布局。
from tkinter import *from tkinter import messageboximport randomclass Application(Frame):def __init__(self, master=None):super().__init__(master) # super()代表的是父类的定义, 而不是父类对象self.master = masterself.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()
运行结果
#coding=utf-8from 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-8from 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()
联系客服