【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




相关文章
|
7月前
|
Python
tkinter之grid布局
tkinter之grid布局
52 1
|
7月前
【qt】Tool Box组件
【qt】Tool Box组件
74 0
|
5月前
flutter- Row Column Expanded ListView
flutter- Row Column Expanded ListView
|
7月前
|
Python
tkinter之place
tkinter之place
52 0
electron setParentWindow绑定父窗口后,会出现center()不生效问题
在使用 Electron 的 `setParentWindow` 方法绑定父窗口后,有时会发现调用 center() 方法无效的情况。
168 0
|
Python 容器
Python Tkinter教程(三)——三种几何布局管理器Pack、Place和Grid的所有参数及相关方法及详细用法
Python Tkinter教程(三)——三种几何布局管理器Pack、Place和Grid的所有参数及相关方法及详细用法
1231 0
Flutter基础widgets教程-ExpansionPanel篇
Flutter基础widgets教程-ExpansionPanel篇
249 0
|
前端开发 容器
【全面解禁!真正的Expression Blend实战开发技巧】十一章 全面解析布局(Grid & Canvas &StackPanel &Wrappanel)
原文:【全面解禁!真正的Expression Blend实战开发技巧】十一章 全面解析布局(Grid & Canvas &StackPanel &Wrappanel)   写这篇文章前,特意在百度搜索了一下,发现目前网上介绍布局的文章不多,质量也不是很高。
1002 0
|
Shell
SWT里Slider和Scale的区别
以前以为Slider和Scale之间只是外观的区别,今天发现不是这样的,因为Slider有一个特点:getSelection()能得到的最 大值并不是getMaximum()的值,要减去getThumb()值,后者是中间的滑块所拥有的值,缺省为10,最小为1。
1285 0