Python Tkinter之布局

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python Tkinter之布局相关的知识,希望对你有一定的参考价值。

参考技术A 1.简介。

Tkinter是Python唯一自带的GUI工具包,它背后使用的Tk组件库是开源世界中公认的标准。

Tkinter对于图形界面的布局管理有三大类:pack、grid、place

Pack()方法提供了选项来布局组件在界面中的位置,选项有:side、expand、fill、等

Grid()方法是采用行列来确定组件在界面中的位置,row是行号,column是列号。

Place()方法是通过组件在界面中的横纵坐标来固定位置。

2.分别使用pack和grid来布局同一组件。

程序如下:

information=['Name','Gender','Age']

def pack(parent):

entries1 = []

for i in information:

row=Frame(parent)

row.pack()

lab1=Label(row,text=i,relief=RAISED,width=7,padx=5,pady=5)

lab1.pack(side=LEFT)

ent1=Entry(row,relief=SUNKEN,width=30)

ent1.pack(side=LEFT,ipadx=5,ipady=5)

entries1.append(ent1)

def print1():

print([ent.get() for ent in entries1])

Button(parent,text='提交',command=print1).pack()

def grid(parent):

row=1

entries2=[]

for i in information:

lab2=Label(parent,text=i,width=7,relief=RAISED,padx=5,pady=5)

ent2=Entry(parent,width=30,relief=SUNKEN)

lab2.grid(row=row,column=0)

ent2.grid(row=row,column=1,ipadx=5,ipady=5)

row +=1

entries2.append(ent2)

def print2():

print([ent.get() for ent in entries2 ])

Button(parent,text='提交',command=print2).grid(columnspan=2)

frm1=Frame(root,bd=5,relief=RAISED)

frm1.pack()

Label(frm1,text='pack').pack()

pack(frm1)

frm2=Frame(root,bd=5,relief=RAISED)

Label(frm2,text='grid').grid(columnspan=2)

frm2.pack()

grid(frm2)

运行结果如下:

3.总结。

从运行结果界面上看两种布局的效果差不多,但通过程序可以看到,这个类似表格的界面使用pack布局的话要是两个组件布置在同一行中要使用一个容器把组件先绑定到一起来。而grid布局在这里就显得比pack方便多了,直接定义各组件在父组件中的行与列就行了。所以通过上面的比较可以得出,如果界面要求是表格类型的那么就使用grid来对组件进行布局会方便很多。

python之tkinter使用-Grid(网格)布局管理器

 

 1 # 使用tkinter编写登录窗口
 2 # Grid(网格)布局管理器会将控件放置到一个二维的表格里,主控件被分割为一系列的行和列
 3 # stricky设置对齐方式,参数N/S/W/E分别表示上、下、左、右
 4 # columnspan:指定控件跨越多列显示
 5 # rowspan:指定控件跨越多行显示
 6 # padx、pady分别设置横向和纵向间隔大小
 7 
 8 import tkinter as tk
 9 
10 root = tk.Tk()
11 root.title("请登录")
12 
13 
14 def reg():
15     ‘‘‘登录校验‘‘‘
16     username = e_user.get()
17     passwd = e_pwd.get()
18     len_user = len(username)
19     len_pwd = len(passwd)
20     if username == admin and passwd == 123:
21         l_msg[text] = 登录成功!
22         l_msg[fg] = green
23     else:
24         l_msg.configure(text=登录失败!, fg=red)
25     # e_user.delete(0, len_user)  # 清空输入框
26     e_pwd.delete(0, len_pwd)
27 
28 
29 # 登录结果提示
30 l_msg = tk.Label(root, text=‘‘)
31 l_msg.grid(row=0, columnspan=2)  # 跨越两列显示
32 
33 # 第一行用户名输入框
34 l_user = tk.Label(root, text=用户名:)
35 l_user.grid(row=1, sticky=tk.W)
36 e_user = tk.Entry(root)
37 e_user.grid(row=1, column=1, sticky=tk.E, padx=3)
38 
39 # 第二行密码输入框
40 l_pwd = tk.Label(root, text=密码:)
41 l_pwd.grid(row=2, sticky=tk.E)
42 e_pwd = tk.Entry(root)
43 e_pwd[show] = *  # 隐藏显示
44 e_pwd.grid(row=2, column=1, sticky=tk.E, padx=3)
45 
46 # 第三行登录按钮
47 f_btn = tk.Frame(root)
48 b_login = tk.Button(f_btn, text=登录, width=6, command=reg)
49 b_login.grid(row=0, column=0)
50 b_cancel = tk.Button(f_btn, text=取消, width=6, command=root.quit)
51 b_cancel.grid(row=0, column=1)
52 f_btn.grid(row=3, columnspan=2, pady=10)
53 
54 root.mainloop()
55 
56 # 原始按钮布局
57 # b_login = tk.Button(root, text=‘登录‘, command=reg)
58 # b_login.grid(row=3, column=1, sticky=tk.W, pady=10)
59 # b_cancel = tk.Button(root, text=‘取消‘, command=root.quit)
60 # b_cancel.grid(row=3, column=1)

 

截图:

技术分享

以上是关于Python Tkinter之布局的主要内容,如果未能解决你的问题,请参考以下文章

Python连载61-tkinter三种布局

python基础 Tkinter 之 几何管理器

python基础 Tkinter 之 几何管理器

python tkinter 布局

Tkinter自学02:tkinter 的3种布局管理器

我Python的tkinter库的grid布局无效?怎么办?