Tkinter 中的 grid() 方法详解

让我们一起来探讨 Tkinter 中最灵活的布局管理器。Grid(网格)几何管理器将组件放置在一个二维表格中。主控件被分割成若干行和列,结果表格中的每一个“单元格”都可以容纳一个组件。在 Tkinter 的所有几何管理器中,grid 管理器是最灵活的。如果您不想学习如何以及何时使用所有三种管理器,您至少应该确保学会这一种。让我们看看下面的例子——

虽然使用 pack 管理器创建这种布局是可能的,但这需要大量的额外框架组件,并且需要做很多工作才能让外观看起来不错。如果我们改用 grid 管理器,只需为每个组件调用一次方法,就能让一切井井有条。使用 grid 管理器非常简单。只需创建组件,然后使用 grid 方法告诉管理器将它们放在哪一行和哪一列。您无需事先指定网格的大小;管理器会根据其中的组件自动确定大小。

代码 #1:

# import tkinter module
from tkinter import * 
from tkinter.ttk import *

# creating main tkinter window/toplevel
master = Tk()

# this will create a label widget
l1 = Label(master, text = "First:")
l2 = Label(master, text = "Second:")

# grid method to arrange labels in respective
# rows and columns as specified
l1.grid(row = 0, column = 0, sticky = W, pady = 2)
l2.grid(row = 1, column = 0, sticky = W, pady = 2)

# entry widgets, used to take entry from user
e1 = Entry(master)
e2 = Entry(master)

# this will arrange entry widgets
e1.grid(row = 0, column = 1, pady = 2)
e2.grid(row = 1, column = 1, pady = 2)

# infinite loop which can be terminated by keyboard
# or mouse interrupt
mainloop()

输出:

!image

代码 #2: 让我们创建上面显示的布局。

# import tkinter module
from tkinter import * 
from tkinter.ttk import *

# creating main tkinter window/toplevel
master = Tk()

# this will create a label widget
l1 = Label(master, text = "Height")
l2 = Label(master, text = "Width")

# grid method to arrange labels in respective
# rows and columns as specified
l1.grid(row = 0, column = 0, sticky = W, pady = 2)
l2.grid(row = 1, column = 0, sticky = W, pady = 2)

# entry widgets, used to take entry from user
e1 = Entry(master)
e2 = Entry(master)

# this will arrange entry widgets
e1.grid(row = 0, column = 1, pady = 2)
e2.grid(row = 1, column = 1, pady = 2)

# checkbutton widget
c1 = Checkbutton(master, text = "Preserve")
c1.grid(row = 2, column = 0, sticky = W, columnspan = 2)

# adding image (remember image should be PNG and not JPG)
img = PhotoImage(file = r"C:\Users\Admin\Pictures\capture1.png")
img1 = img.subsample(2, 2)

# setting image with the help of label
Label(master, image = img1).grid(row = 0, column = 2,
       columnspan = 2, rowspan = 2, padx = 5, pady = 5)

# button widget
b1 = Button(master, text = "Zoom in")
b2 = Button(master, text = "Zoom out")

# arranging button widgets
b1.grid(row = 2, column = 2, sticky = E)
b2.grid(row = 2, column = 3, sticky = E)

# infinite loop which can be terminated 
# by keyboard or mouse interrupt
mainloop()

输出:

!image

警告: 切记永远不要在同一个主窗口中混合使用 grid()pack()

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。如需转载,请注明文章出处豆丁博客和来源网址。https://shluqu.cn/42578.html
点赞
0.00 平均评分 (0% 分数) - 0