分别通过grid和pack两种几何管理方式创建一个可以随着界面拉伸内部组件也随之扩展的界面,并且通过增加Frame容器来规避grid和pack不能在同一个容器中同时使用的问题,将两个界面合二为一,然后底部增加一个quit按钮,用于退出程序。
最终界面如图所示:
完整代码如下:
from tkinter import *colors=['red','green','orange','white','yellow','blue']def gridbox(root): frm=Frame(root) 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) frm.pack(expand=YES,fill=BOTH)
def packbox(root): frm=Frame(root) Label(frm, text='Pack').pack() # pack函数默认side=TOP for color in colors: row=Frame(frm) lab = Label(row, text=color, relief=RIDGE, width=25) ent = Entry(row, bg=color, relief=SUNKEN, width=50) row.pack(side=TOP,expand=YES,fill=BOTH) lab.pack(side=LEFT,expand=YES,fill=BOTH) ent.pack(side=RIGHT,expand=YES,fill=BOTH) frm.pack(expand=YES,fill=BOTH)if __name__=='__main__': root=Tk() gridbox(root) packbox(root) Button(root,text='Quit',command=root.quit).pack(side=BOTTOM) mainloop()