【发布时间】:2021-03-17 16:10:55
【问题描述】:
我使用 Tkinter 在 Python3 中编写了一个 GUI,并使用 .grid() 放置小部件。我如何告诉 Tkinter 将新的小部件放置在与最后放置的小部件相同的行上,但放在新的指定列上。问题是,当我没有指定行并且我不想硬编码行号或使用行计数器污染我的代码时,Tkinter 会自动使用下一行,每次我在列中插入小部件时我都必须递增该行计数器0.
我尝试了什么:
#!/usr/bin/env python3
from tkinter import *
root=Tk()
Label(root, text="Label 0").grid(column=0)
Label(root, text="Label 1").grid(column=1)
Label(root, text="Label 2").grid(column=0)
Label(root, text="Label 3").grid(column=1)
Label(root, text="Label 4").grid(column=0)
Label(root, text="Label 5").grid(column=1)
root.mainloop()
布局的样子
Label 0
Label 1
Label 2
Label 3
Label 3
Label 5
布局应该是什么样子的
Label 0 Label 1
Label 2 Label 3
Label 3 Label 5
我不想要的
可以通过指定列号来实现正确的布局,像这样:
#!/usr/bin/env python3
from tkinter import *
root=Tk()
Label(root, text="Label 0").grid(column=0,row=0)
Label(root, text="Label 1").grid(column=1,row=0)
Label(root, text="Label 2").grid(column=0,row=1)
Label(root, text="Label 3").grid(column=1,row=1)
Label(root, text="Label 4").grid(column=0,row=2)
Label(root, text="Label 5").grid(column=1,row=2)
root.mainloop()
但这并不灵活,在第二行插入一些内容意味着必须更改所有后续行的代码。添加行计数器是可能的,但这很容易出错,因为很容易忘记增加计数器。有没有办法在与最后插入的小部件在同一行的第二列中插入一个新小部件,而无需硬编码或跟踪最后一个行号?
或者是否有一个函数可以返回最后插入的小部件的行?所以我可以这样做:
#!/usr/bin/env python3
from tkinter import *
root=Tk()
Label(root, text="Label 0").grid(column=0)
Label(root, text="Label 1").grid(column=1,row=<root.unknowFunctionToGetTheLastInsertedRow>)
Label(root, text="Label 2").grid(column=0)
Label(root, text="Label 3").grid(column=1,row=<root.unknowFunctionToGetTheLastInsertedRow>)
Label(root, text="Label 4").grid(column=0)
Label(root, text="Label 5").grid(column=1,row=<root.unknowFunctionToGetTheLastInsertedRow>)
root.mainloop()
【问题讨论】:
标签: python tkinter tkinter-layout