一、grid布局管理器
一个GUI应用程序必然有大量的组件,这些组件如何排布?这时候就需要使用tkinter提供的布局管理器帮助我们组织,管理再父组件中子组件的布局方式,tkinter提供了三种管理器:pack、grid、place
grid表格布局,采用表格结构组织组件,子组件的位置由行和列的单元格确定,并且可以跨行和跨列,从而实现复杂的布局。
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布局实现登录界面''' 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()方法提供的几个重要选项
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()方法的选项