【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




相关文章
|
前端开发
css怎么去除a标签的下划线?
css怎么去除a标签的下划线?
|
11月前
|
文字识别 自然语言处理 API
同时斩获两个开源第一,超火的通义Qwen3-VL CookBook来了
Qwen3-VL开源发布后广受认可,登顶Chatbot Arena视觉榜与OpenRouter图像处理市场份额第一。支持文档解析、OCR、视频理解、3D定位等多模态任务,现推出详细Cookbook助力开发者高效应用。
2525 3
|
开发者 Python 设计模式
用 Python 轻松创建图形界面:Tkinter 入门指南
用几行Python代码就能创建桌面小工具?没错!tkinter是Python内置的GUI库,无需安装,跨平台支持。从窗口、按钮到弹窗,轻松实现图形界面交互,适合新手快速上手,打造专属小工具。#Python #tkinter
1475 0
|
缓存 负载均衡 网络协议
面试官:什么是连接池?
啊,这....小马曾经也很好奇这是个什么玩意,后面写GO的时候因为要自己实现DB层和redis层,才对它有了更进一步深入的了解。但要是正儿八经地说呢,也不知道该怎么描述。还是借助网络上各路大神的文章来抛玉引我这个砖吧。
691 0
面试官:什么是连接池?
|
前端开发 Python
python之【Tkinter模块】
python之【Tkinter模块】
492 6
|
数据可视化 Java 程序员
IDEA插件-Maven Helper
Maven Helper是一个用于Apache Maven项目的IntelliJ IDEA插件,它提供了一些有用的功能来帮助开发人员更好地管理和调试Maven项目。
3423 0
IDEA插件-Maven Helper
|
数据安全/隐私保护
Pyside6实操笔记(一):系统页面跳转
本文介绍了如何使用Pyside6实现系统页面跳转,包括登录界面跳转到注册界面的代码实现。关键步骤包括创建空窗口、编写跳转逻辑,并提供了完整的登录和注册窗口代码。此外,还涉及了国际化、主题色设置和窗口特效等高级功能。
1017 0

热门文章

最新文章