先说下学了这套教程咱们的目标是什么,首先我们要学的是一套python的自带UI库,具有跨平台特质,可以在Windows与Mac乃至Linux平台的界面端都能通用,没有移植成本,并且上手的门槛低。后面为了适应微信公众号的阅读,我会将所有的知识点拆开一次讲一点,确保在五分钟内,一会就会。不对阅读造成负担。即使你是非程序设计专业的小白,或者没有写过python的朋友,通过这段教程也能学会开发一个带桌面UI的应用。

本系列免费教程,猫都能学会,咱们不花金币,点个关注,在看,分享出去就是对我最大的原创动力。

在本篇开始前,我推荐你阅读 五分钟技术分享使用Python快速制作UI界面 这一篇文章将会带你快速的对thinker UI有一个初步的了解。

如果你对python有一些语法上的困扰,我推荐你阅读 Hello Python 1Hello Python 2

那么现在开始我们的主题 。

thinker的几种布局方式

在 Tkinter 中,布局是一个重要的概念,因为它决定了窗口中各个部件的位置和大小。

Pack 布局

Pack 布局是 Tkinter 中最简单的布局方式之一。通过 pack() 方法,可以按照添加的顺序自动排列部件。例如:

1
2
3
4
5
6
7
8
9
import tkinter as tk

root = tk.Tk()

tk.Label(root, text="Label 1").pack()
tk.Label(root, text="Label 2").pack()
tk.Label(root, text="Label 3").pack()

root.mainloop()

在上面的例子中,三个标签部件按照它们被创建的顺序从上到下排列。 pack() 方法将它们添加到了窗口中。由于没有提供任何布局参数,这两个部件将默认按照它们被创建的顺序垂直排列。

Pack 方法参数

pack() 方法支持多个参数,下面是一些常用的参数:

side:指定部件在父容器中的放置方向,可以是 “top”、”bottom”、”left” 或 “right”。
fill:指定部件是否填充父容器的剩余空间,可以是 “x”(水平填充)、”y”(垂直填充)或 “both”(水平和垂直填充)。
expand:指定是否允许部件扩展以填充额外的空间,可以是 True 或 False。
padx 和 pady:指定部件周围的水平和垂直填充量。

1
2
3
4
5
6
7
8
9
10
11
12
import tkinter as tk

root = tk.Tk()

# 创建两个按钮部件并使用 pack() 方法添加到窗口中
button1 = tk.Button(root, text="Button 1")
button1.pack(side="left", fill="both", expand=True, padx=5, pady=5)

button2 = tk.Button(root, text="Button 2")
button2.pack(side="right", fill="both", expand=True, padx=5, pady=5)

root.mainloop()

在这个例子中,我们创建了两个按钮部件,并使用 pack() 方法将它们添加到窗口中。第一个按钮位于左侧,第二个按钮位于右侧,它们都水平填充并允许扩展以填充额外的空间。padx 和 pady 参数指定了按钮周围的填充量。

Grid 布局

Grid 布局是一个更灵活和强大的布局方式,它允许您将窗口划分为行和列,并在其中放置部件。例如:

1
2
3
4
5
6
7
8
9
import tkinter as tk

root = tk.Tk()

tk.Label(root, text="Label 1").grid(row=0, column=0)
tk.Label(root, text="Label 2").grid(row=0, column=1)
tk.Label(root, text="Label 3").grid(row=1, column=0)

root.mainloop()

在上面的例子中,我们使用 grid() 方法将三个标签部件放置在一个 2x2 的网格中。

Grid 方法参数

grid() 方法支持多个参数,下面是一些常用的参数:

row:指定部件所在的行数,从0开始计数。
column:指定部件所在的列数,从0开始计数。
rowspan:指定部件占据的行数。
columnspan:指定部件占据的列数。
sticky:指定部件在格子中的对齐方式,可以是 “n”(北,即上)、”s”(南,即下)、”e”(东,即右)、”w”(西,即左)、”nw”(西北)、”ne”(东北)、”sw”(西南)、”se”(东南)、”nsew”(上下左右都粘贴)等组合。
padx 和 pady:指定部件周围的水平和垂直填充量。

1
2
3
4
5
6
7
8
9
10
11
12
import tkinter as tk

root = tk.Tk()

# 创建两个按钮部件并使用 grid() 方法添加到窗口中
button1 = tk.Button(root, text="Button 1")
button1.grid(row=0, column=0, padx=5, pady=5)

button2 = tk.Button(root, text="Button 2")
button2.grid(row=1, column=1, sticky="nsew")

root.mainloop()

在这个例子中,我们创建了两个按钮部件,并使用 grid() 方法将它们添加到了窗口中。第一个按钮位于第 0 行第 0 列,具有一定的填充量。第二个按钮位于第 1 行第 1 列,并采用了 sticky=”nsew” 参数,使得它会在格子中扩展以填充额外的空间。

Place 布局

Place 布局是一种绝对定位的布局方式,它允许您精确地指定部件的位置和大小。例如:

1
2
3
4
5
6
7
8
9
import tkinter as tk

root = tk.Tk()

# 创建一个按钮部件并使用 place() 方法添加到窗口中
button = tk.Button(root, text="Button")
button.place(x=100, y=50, width=100, height=30)

root.mainloop()

在上面的例子中,我们使用 place() 方法将一个按钮添加到窗口中,并通过 width 和 height 参数指定了按钮的宽度和高度。

Place 方法参数

place() 方法支持多个参数,下面是一些常用的参数:

x 和 y:指定部件的左上角相对于父容器左上角的水平和垂直位置。
relx 和 rely:指定部件的左上角相对于父容器宽度和高度的比例位置,范围为 0.0 到 1.0。
width 和 height:指定部件的宽度和高度。
anchor:指定部件的锚点,即部件相对于其位置的对齐方式,可以是 “n”(北,即上)、”s”(南,即下)、”e”(东,即右)、”w”(西,即左)、”nw”(西北)、”ne”(东北)、”sw”(西南)、”se”(东南)等。
bordermode:指定边界模式,可以是 “inside”(内边界)或 “outside”(外边界)。

综合布局

在实际应用中,通常会组合使用这些布局方式,以获得更复杂的界面布局。例如:

1
2
3
4
5
6
7
8
9
10
11
import tkinter as tk

root = tk.Tk()

tk.Label(root, text="Username:").grid(row=0, column=0)
tk.Entry(root).grid(row=0, column=1)
tk.Label(root, text="Password:").grid(row=1, column=0)
tk.Entry(root, show="*").grid(row=1, column=1)
tk.Button(root, text="Login").grid(row=2, columnspan=2)

root.mainloop()

在上面的例子中,我们使用了 Grid 布局来创建一个简单的登录窗口,包括用户名标签和输入框、密码标签和输入框以及登录按钮。

到这为止本章的内容就结束,下一章再见👋。