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

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

一、grid布局管理器


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



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





grid()方法提供的选项

image.png



代码演示


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()


运行结果

4520b65bb96a46c79b7981e0178bc4c2.png



通过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()


运行结果

c343de5c057a4994af47fba2c1c6078e.png




二、pack布局管理器


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


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



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


image.png


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()



运行结果

1e0247d78d9f4d618906de341b9a27c1.png




三、place布局管理器


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



place()方法的选项


image.png




相关文章
|
1月前
|
Python
tkinter之pick布局
tkinter之pick布局
33 0
|
1月前
|
Python
tkinter之grid布局
tkinter之grid布局
32 1
|
1月前
|
Python
tkinter之place
tkinter之place
32 0
关于 cl_gui_alv_grid 的 toolbar 事件
关于 cl_gui_alv_grid 的 toolbar 事件
|
图形学
unity之Layout Group居中显示
unity实现Layout Group居中显示
unity之Layout Group居中显示
|
Python 容器
Python Tkinter教程(三)——三种几何布局管理器Pack、Place和Grid的所有参数及相关方法及详细用法
Python Tkinter教程(三)——三种几何布局管理器Pack、Place和Grid的所有参数及相关方法及详细用法
285 0
|
前端开发 Python
Python tkinter 之 Scrollbar 与 Listbox、Entry 等控件联用
Python tkinter 之 Scrollbar 与 Listbox、Entry 等控件联用
131 0
|
C#
WPF: FishEyePanel/FanPanel - 自定义Panel
原文:WPF: FishEyePanel/FanPanel - 自定义Panel 原文来自CodeProject,主要介绍如何创建自定义的Panel,如同Grid和StackPanel。
1227 0
|
前端开发 容器
【全面解禁!真正的Expression Blend实战开发技巧】十一章 全面解析布局(Grid & Canvas &StackPanel &Wrappanel)
原文:【全面解禁!真正的Expression Blend实战开发技巧】十一章 全面解析布局(Grid & Canvas &StackPanel &Wrappanel)   写这篇文章前,特意在百度搜索了一下,发现目前网上介绍布局的文章不多,质量也不是很高。
973 0