澳门在线威尼斯官方 > 澳门在线威尼斯官方 > GUI之tkinter学习笔记2界面布局显示,两种方式实现

原标题:GUI之tkinter学习笔记2界面布局显示,两种方式实现

浏览次数:171 时间:2019-10-22


分别通过grid和pack两种几何管理方式创建一个可以随着界面拉伸内部组件也随之扩展的界面,并且通过增加Frame容器来规避grid和pack不能在同一个容器中同时使用的问题,将两个界面合二为一,然后底部增加一个quit按钮,用于退出程序。

相关内容:

  • pack
    • 介绍
    • 常用参数
    • 使用情况
    • 常用函数
  • grid
    • 澳门在线威尼斯官方 ,介绍
    • 常用参数
    • 使用情况
    • 常用函数
  • place
    • 介绍
    • 常用参数
    • 使用情况
    • 常用函数

 

首发时间:2018-03-04 14:20


最终界面如图所示:

pack:

  • 介绍:
    • pack几何管理器按行或列打包小部件。 可以使用填充fill,展开expand和靠边side等选项来控制此几何体管理器。
    • pack的排放控件的形式就像将一个个控件按大小从上到下放过去澳门在线威尼斯官方 1
    • 在窗口不设定大小的而使用pack进行布局的情况下,窗口默认大小为刚好包裹所有控件的大小
    • 默认情况下添加的控件是居中且占据整行的澳门在线威尼斯官方 2
  • 常用参数:
    • fill:填充分配给控件的空间,fill:X为填充X轴方向,Y为Y轴方向,BOTH为X+Y澳门在线威尼斯官方 3
    • expand:先按普通标准来规定控件大小,如果后面窗口还剩下空间,那么会分给那些expand=True的控件,如图中是两个不同大小的按钮,其中2expand=True澳门在线威尼斯官方 4 ,当使用expand=True时,side将不会生效!
    • side:使控件靠窗口的指定方向并排,side可取值LEFT,RIGHT,TOP,BOTTOM.澳门在线威尼斯官方 5
    • anchor:对齐方式,可取值“n”, “s”, “w”, “e”, “nw”, “sw”, “se”, “ne”, “center”(默认为” center”)澳门在线威尼斯官方 6
    • ipadx, ipady:内边距
    • padx,pady:外边距
  • 适用情况:与gird相比,pack有一定的局限性,但在一些但很常见的情况下使用起来要容易得多:
    • 将一个小部件放入一个框架(或任何其他容器小部件)中,并让它填充整个框架
    • 将多个小部件放在一起
    • 并排放置一些小部件
  • 补充:

    • 常用函数:
      • pack_propagate(flag):由窗口调用来配置pack控件时窗口的大小,当flag=0时,那么窗口大小将不再仅仅包裹住所有控件,这时候窗口的高度和宽度设置才可以生效
      • pack_forget():移除控件,但并没有进行摧毁,可以再次使用pack或其他方式来显示
      • pack_info():返回pack提供的选项所对应得值。
      • pack_slaves():以列表方式返回本组件的所有子组件对象。

    from tkinter import * root=Tk()

    # for i in range(10):

    ##side
    # btn = Button(text=i)
    # btn.pack(side=LEFT)
    # btn.pack(side=RIGHT)
    # btn.pack(side=(TOP,LEFT))
    
    ####fill
    # btn.pack(fill=X)
    # btn.pack(side=LEFT,fill=Y)
    # btn.pack(fill=BOTH)
    

    ##expand # btn1=Button(text=1,bg='green') # btn2=Button(text=2,bg='yellow') # btn1.pack(fill=X) # btn2.pack(expand=True) #anchor: # btn1=Button(text=1,bg='green') # btn2=Button(text=2,bg='yellow') # btn1.pack(fill=X) # btn2.pack(anchor=E)

    #pack_propagete # btn1=Button(text=1,bg='green') # btn2=Button(text=2,bg='yellow') # root.pack_propagate(0) # btn1.pack() # btn2.pack()

    #pack_forget: # import time,threading # label=Label(text="警告!") # label.pack() # def run(): # start_time=time.time() # while True: # if time.time()-start_time>3: # label.pack_forget() # break # t=threading.Thread(target=run) # t.setDaemon(True) # t.start()

    root.mainloop()

 


澳门在线威尼斯官方 7

grid:

  • 介绍:grid是格子的意思,grid可以将控件区块式摆放.澳门在线威尼斯官方 8
  • 常用参数:
    • row: 行号,区分不同控件是否处于同一行
    • column: 列号,区分不同控件是否处于同一列
    • sticky: 决定控件的贴靠方向,该选项从集合N,S,E,W [东南西北的意思],中取一个或多个值。比如要将标签与左边框对齐,可以使用W(西)澳门在线威尼斯官方 9澳门在线威尼斯官方 10
    • rowspan:行跨度,决定某个控件占的行数 ,默认一行
    • columnspan:列跨度,决定某个控件占的列数,默认一列
    • ipadx, ipady:内边距
    • padx,pady:外边距
  • 适用情况:
    • 设计对话框的时候特别方便澳门在线威尼斯官方 11
    • 区块化摆放的时候
  • 补充:

    • 常用函数:

      • grid_forget :移除控件,但并没有进行摧毁,可以再次使用grid或其他方式来显示 [grid_remove有同样作用]
      • grid_propagete

        :由窗口调用来配置pack控件时窗口的大小,当flag=0时,那么窗口大小将不再仅仅包裹住所有控件,这时候窗口的高度和宽度设置才可以生效

      • grid_slaves():以列表方式返回本组件的所有子组件对象。

    from tkinter import *

    root=Tk() root.title("我的窗口") label_user=Label(text='用户名:',bg='green') label_pwd=Label(text='密码:',bg='green') user=Entry() pwd=Entry() # row,column,sticky label_user.grid(row=0,column=0,sticky=W) #一个有sticky,一个没有sticky,以作区分 label_pwd.grid(row=1,column=0) # rowspan,columnspan user.grid(row=0,column=1) pwd.grid(row=1,column=1) btn=Button(text="提交") btn.grid(row=0,column=3,rowspan=2,columnspan=2,padx=5, pady=5) # 下面主要是将第一列拉大来显示上面sticky的效果 v=IntVar() check=Checkbutton(text="下次自动登录",variable=v,) check.grid(row=2,column=0,sticky=W)

# _forget:
import time,threading
label=Label(text="欢迎登录!",bg='blue')
label.grid()
def run():
    start_time=time.time()
    while True:
        if time.time()-start_time>3:
            label.grid_forget()
            break
t=threading.Thread(target=run)
t.setDaemon(True)
t.start()



root.mainloop()

 

 


原始图片

place:

  • 介绍:可以使用绝对的位置或相对位置来摆放控件。 澳门在线威尼斯官方 12 澳门在线威尼斯官方 13
  • 常用参数:
    • x:控件在窗口中的x坐标
    • y:控件在窗口中的y坐标澳门在线威尼斯官方 14
    • relx,rely:与主窗口的相对位置,比如澳门在线威尼斯官方 15
    • relwidth,relheight:相对大小,比如height=0.5,width=0.5时控件占据窗口的四分之一大小
  • 适用情况:
    • 自定义显示方式
    • 将按钮定位在对话框中
  • 补充:

    • 常用函数:
      • place_forget():移除控件,但并没有进行摧毁,可以再次使用place或其他方式来显示
      • place_slaves():以列表方式返回本组件的所有子组件对象。[slaves()具有同样功能]
      • place_info():返回place提供的选项所对应得值。

    from tkinter import *

    root=Tk() root.geometry('100x100') label=Label(text="用户名:",bg='green') entry=Entry() label.pack(fill=X) #x,y # entry.place(x=0,y=0)

    #relx,rely # entry.place(relx=0.3, rely=0.3) # entry.place(relx=0.5, rely=0.5)

    #relheight,relwidth # entry.place(relx=0.5, rely=0.5,relheight=0.5,relwidth=0.5)

    #_forget: import time,threading label2=Label(text="警告!",bg='blue') label2.place(relx=0.2,rely=0.2) def run():

    start_time=time.time()
    while True:
        if time.time()-start_time>3:
            label2.place_forget()
            break
    

    t=threading.Thread(target=run) t.setDaemon(True) t.start()

    root.mainloop()

 

 

想要了解更多,可以参考tkinter的官方文档:

** 

 


完整代码如下:from tkinter import *

colors=['red','green','orange','white','yellow','blue']

def gridbox:

frm=Frame

Label(frm,text='Grid').grid(columnspan=2) # 选项columnspan的设置用于允许label组件可以横跨两列,rawspan选项可以实现横跨多行的效果

row=1

for color in colors:

lab=Label(frm,text=color,relief=RIDGE,width=25)

ent=Entry(frm,bg=color,relief=SUNKEN,width=50)

lab.grid(row=row,column=0,sticky=NSEW) # sticky选项是grid几何管理器中设置是否允许组件拉伸的选项

ent.grid(row=row,column=1,sticky=NSEW) # NSEW表示允许组件向4个方向都可以拉伸

frm.rowconfigure(row,weight=1) # 要允许组件的行和列可以扩展,必须设置一个大于0的weight值,默认是0不扩展

row+=1

frm.columnconfigure(0,weight=1) # weight值的不同可以让他们按照不同的比例扩展

frm.columnconfigure(1,weight=1)

本文由澳门在线威尼斯官方发布于澳门在线威尼斯官方,转载请注明出处:GUI之tkinter学习笔记2界面布局显示,两种方式实现

关键词:

上一篇:澳门在线威尼斯官方:事件绑定,GUI之tkinter学习

下一篇:官方文档翻译