基本上,使用.grid() 方法,如果您在(0, 0) 位置创建一个小部件并且下一个小部件位于(100, 100) 位置,那么系统会将第二个小部件放置在看似(1, 1) 的位置。这是因为第二个小部件依次位于“下一个位置”。你可以认为(1, 1)到(99, 99)的位置仍然存在但无限小,所以(100, 100)看起来就在(0, 0)旁边,示例如下:
from tkinter import *
root = Tk()
label1 = Label(root, text="Col0, Row0")
label2 = Label(root, text="Col100, Row100")
label1.grid(column=0, row=0)
label2.grid(column=100, row=100)
root.mainloop()
关于能够使用.grid() 将对象放置在对角,这是可能的,并且可以使用rowconfigure 和columnconfigure 的weight 属性的组合以及sticky 属性的组合来完成在小部件上使用.grid()。见下文:
from tkinter import *
root = Tk()
label1 = Label(root, text="1")
label2 = Label(root, text="2")
label1.grid(column=0, row=0, sticky="NW")
label2.grid(column=1, row=1, sticky="SE")
root.columnconfigure(0, weight=1)
root.rowconfigure(0, weight=1)
#Giving the rows and columns a weight that is not equal to 0
#means that the rows and columns expand to fill the space in the window.
#Then we assign a sticky value to the labels,
#to position them where we need them in the cell.
root.columnconfigure(1, weight=1)
root.rowconfigure(1, weight=1)
root.mainloop()
如果您正在寻找有关 .pack() 的不同属性如何工作的更多信息,我前段时间写了这篇文章作为另一个问题的答案,它应该有助于了解使用 .pack() 的基础知识:
from tkinter import *
root = Tk()
top = Toplevel()
top.withdraw()
var1 = StringVar(root)
var1.set("top")
var2 = StringVar(root)
var2.set("none")
var4 = StringVar(root)
var4.set("center")
var3 = BooleanVar(root)
def command(top, var1, var3, var2):
top.destroy()
top = Toplevel()
top.geometry("500x500")
Label(top, text="Welcome home").pack()
Button(top, text="Button1").pack(side=var1.get(), fill=var2.get(), expand=var3.get(), anchor=var4.get())
Button(top, text="Button2").pack(side=var1.get(), fill=var2.get(), expand=var3.get(), anchor=var4.get())
Button(top, text="Button3").pack(side=var1.get(), fill=var2.get(), expand=var3.get(), anchor=var4.get())
Button(top, text="Button4").pack(side=var1.get(), fill=var2.get(), expand=var3.get(), anchor=var4.get())
option1 = OptionMenu(root, var1, "top", "left", "bottom", "right")
check1 = Checkbutton(root, variable=var3, text="Expand?")
option2 = OptionMenu(root, var2, "none", "x", "y", "both")
option3 = OptionMenu(root, var4, "center", "n", "ne", "e", "se", "s", "sw", "w", "nw")
button1 = Button(root, text="Render", command=lambda:command(top, var1, var3, var2))
option1.pack()
check1.pack()
option2.pack()
option3.pack()
button1.pack()
root.mainloop()
将其放入您选择的编辑器中并使用它。
我还想指出,Stack Overflow 并不是真正适合此类问题的地方,我建议在使用 SO 之前查找有关您想知道的任何内容的文档。
例如,最好的 tkinter 文档(在我看来)是:
http://effbot.org/tkinterbook/