Tkinter:为什么下一个 'Label' 以不同的方式使用它的 0 列?
Tkinter: Why is the next 'Label' taking it's 0 column differently?
label = tk.Label(window, text="Guess a number that can be anything from '10' to '50', you have 5 chances !!!", fg="black", bg="white", font=("Arial Bold", 25))
label.grid(row=0)
inp = tk.Entry(window)
inp.grid(row=1)
输出应该是这样的:
猜一个从“10”到“50”的数字...
输入字段
但是它的:
输入框偏离中心,为什么?
第 0 列有一个非常宽的标签,强制该列与标签一样宽。条目小部件位于同一个非常宽的列中,默认情况下网格居中列中的项目。
如果您希望条目小部件左对齐,可以使用 sticky
选项强制小部件“粘”在列的西(左)侧。
inp.grid(row=1,sticky="w")
如果这些是 UI 中仅有的两个小部件,这可能是正确的解决方案。如果您计划让其他小部件与标签或条目小部件对齐,您可能需要做一些其他事情。在不了解最终产品的情况下,很难确定。
另一种解决方案是将标签配置为跨越两列,并为第二列提供所有额外 space。这将导致第一列尽可能小。
label.grid(row=0, columnspan=2)
window.grid_columnconfigure(1, weight=1)
选择有点取决于您打算用 window 做什么。如果您只想拥有这两个小部件而没有其他任何东西,那么第一个解决方案需要更少的代码行。第二种解决方案可以更轻松地在与条目小部件相同的行中添加其他小部件。
使用置顶
import tkinter as tk
window =tk.Tk()
label = tk.Label(window, text="Guess a number that can be anything from '10' to '50', you have 5 chances !!!", fg="black", bg="white", font=("Arial Bold", 25))
label.grid(row=0)
inp = tk.Entry(window)
inp.grid(row=1,sticky="w")
window.mainloop()
label = tk.Label(window, text="Guess a number that can be anything from '10' to '50', you have 5 chances !!!", fg="black", bg="white", font=("Arial Bold", 25))
label.grid(row=0)
inp = tk.Entry(window)
inp.grid(row=1)
输出应该是这样的:
猜一个从“10”到“50”的数字...
输入字段
但是它的:
输入框偏离中心,为什么?
第 0 列有一个非常宽的标签,强制该列与标签一样宽。条目小部件位于同一个非常宽的列中,默认情况下网格居中列中的项目。
如果您希望条目小部件左对齐,可以使用 sticky
选项强制小部件“粘”在列的西(左)侧。
inp.grid(row=1,sticky="w")
如果这些是 UI 中仅有的两个小部件,这可能是正确的解决方案。如果您计划让其他小部件与标签或条目小部件对齐,您可能需要做一些其他事情。在不了解最终产品的情况下,很难确定。
另一种解决方案是将标签配置为跨越两列,并为第二列提供所有额外 space。这将导致第一列尽可能小。
label.grid(row=0, columnspan=2)
window.grid_columnconfigure(1, weight=1)
选择有点取决于您打算用 window 做什么。如果您只想拥有这两个小部件而没有其他任何东西,那么第一个解决方案需要更少的代码行。第二种解决方案可以更轻松地在与条目小部件相同的行中添加其他小部件。
使用置顶
import tkinter as tk
window =tk.Tk()
label = tk.Label(window, text="Guess a number that can be anything from '10' to '50', you have 5 chances !!!", fg="black", bg="white", font=("Arial Bold", 25))
label.grid(row=0)
inp = tk.Entry(window)
inp.grid(row=1,sticky="w")
window.mainloop()