zoukankan      html  css  js  c++  java
  • tkinter学习-布局管理器

    阅读目录

    • pack 是按照添加顺序排列的组件
    • grid  是按照行/列形式排序的组件
    • place 允许程序员指定组件的大小和位置

    pack:

      说明:适用于少量的简单的组件的排列

      fill:这个选项是告诉窗口管理器该组件将填充整个分配给它的空间,BOTH表示同时横向和纵向扩展,X表示横向,Y表示纵向

    from tkinter  import  *
    root = Tk()
    Label(root,text='1',bg='green').pack(fill=X)
    Label(root,text='2',bg='red').pack(fill=X)
    Label(root,text='3',bg='yellow').pack(fill=X)
    Label(root,text='4',bg='blue').pack(fill=X)
    mainloop()

    结果:

        

      side:这个选项是告诉窗口该组件的位置,同时有四个值

    from tkinter import *
    root = Tk()
    Label(root,text='1',bg='green').pack(side=LEFT)
    Label(root,text='2',bg='red').pack(side=TOP)
    Label(root,text='3',bg='yellow').pack(side=BOTTOM)
    Label(root,text='4',bg='blue').pack(side=RIGHT)
    mainloop()

    结果:

        

    grid:

      说明:只需告诉他你想要将组件放置的位置(行/列,row指定行,cloumn指定列)

    from tkinter import *
    root = Tk()
    Label(root,text='用户名').grid(row=0)
    Label(root,text='密码').grid(row=1)
    Entry(root).grid(row=0,column=1)
    Entry(root,show='*').grid(row=1,column=1)
    mainloop()

    结果:

              

      默认的情况下组件会居中的显示在网格中,可以用sticky选项修改这个特征,值为 E,W,S,N(东西南北)

    Label(root,text='用户名').grid(row=0,sticky=W)
    Label(root,text='密码').grid(row=1,sticky=W)

      想要用几个网格放置一个组件,只需指定rowspan(跨行)和columnspan(跨列)即可

    from tkinter import *
    root = Tk()
    Label(root,text='用户名').grid(row=0,sticky=W)
    Label(root,text='密码').grid(row=1,sticky=W)
    photo = PhotoImage(file='3.gif')
    Label(root,image=photo).grid(row=0,column=2,rowspan=2)
    Entry(root).grid(row=0,column=1)
    Entry(root,show='*').grid(row=1,column=1)
    Button(root,text='提交',width=10).grid(row=2,columnspan=3,pady=5,padx=10)
    mainloop()

    结果:

        

    place:

      说明:这个布局管理器可以让你使你的组件放到任何你想放到的地方,x,y是对应的坐标,anchor是那个方位对应这个坐标,值为 E,W,S,N(东西南北)

    from tkinter import *
    root = Tk()
    root.title('山丘')
    root.geometry('450x400')
    Label(root,text='用户名:').place(x=100,y=170)
    Label(root,text='密码:').place(x=100,y=230)
    photo = PhotoImage(file='welcome.gif')
    Label(root,image=photo).place(x=0,y=0)
    Entry(root).place(x=190,y=170)
    Entry(root,show='*').place(x=190,y=230)
    Button(root,text='提交',width=10).place(x=170,y=300)
    mainloop()

    结果:

          

      若让一个组件覆盖另一个组件,place()也可以帮你实现

    from tkinter import *
    root = Tk()
    def show():
        pass
    photo = PhotoImage(file='8.gif')
    Label(root,image=photo).pack()
    Button(root,text='点我',command=show).place(x=10,y=10)
    mainloop()

    结果:

        

    参考文献:

        小甲鱼的python教学视频

  • 相关阅读:
    为什么Java不支持多重继承
    thymeleaf生成页面时报错:An error happened during template parsing (template: "class path resource [templates/index.html]")的解决办法
    MySQL操作数据时区分大小写
    java.lang.NoClassDefFoundError: com/jhlabs/image/RippleFilter
    多线程学习系列:(六)线程池基础下
    多线程学习系列:(四)线程同步基础下
    多线程学习系列:(八)Winform中多线程编程基础上
    多线程学习系列:(五)线程池基础上
    多线程学习系列:(七)基于多线程的基本组件
    HTTP头部
  • 原文地址:https://www.cnblogs.com/mengd/p/7289400.html
Copyright © 2011-2022 走看看