Python 使用 Tkinter 移动标签和输入框



我写了一个使用 Tkinter 的代码,我只是无法排列标签和输入框的位置,有人可以帮助我。我的代码在下面,打印出来是图1。我希望它看起来像图 2。

import Tkinter
main_window = Tkinter.Tk()
main_window.geometry("320x400")
main_window.title("Address")
label = Tkinter.Label(main_window,text ="Name:")
label.pack()

nameentry = Tkinter.Entry(main_window) 
nameentry.pack()

label2 = Tkinter.Label(main_window, text= "Address:")
label2.pack()
addressentry = Tkinter.Entry(main_window)
addressentry.pack()
label3 = Tkinter.Label(main_window, text = "Phone Number:")
label3.pack()
numberentry = Tkinter.Entry(main_window)
numberentry.pack()
main_window.mainloop()

图1

图2

你显然希望东西布置在一个网格中,所以grid是比pack更好的选择。

您的布局有三行和两列。标签位于第 0 列(零)中,您希望它们锚定在右上角(东北,表示为"ne")。输入字段位于第二列第 1 列(一)中。

它看起来像这样(为清楚起见,添加了额外的空间,这不是必需的):

label.grid( row=0, column=0, sticky="ne")
label2.grid(row=1, column=0, sticky="ne")
label3.grid(row=2, column=0, sticky="ne")
nameentry.grid(   row=0, column=1, sticky="nsew")
addressentry.grid(row=1, column=1, sticky="nsew")
numberentry.grid( row=2, column=1, sticky="nsew")

最后一步是告诉tkinter如何处理它拥有的任何额外空间。在您的情况下,您可能希望标签列尽可能小,输入字段尽可能大。此外,地址似乎是多行的(尽管您使用的是仅接受一行的条目小部件)。

为了实现这一点,我们希望给中间行和右列一个正权重,tkinter 用它来知道如何分配额外的空间:

main_window.grid_rowconfigure(1, weight=1)
main_window.grid_columnconfigure(1, weight=1)

最新更新