我正在尝试使用Python(Tkinter)设计屏幕,在对问题进行了全面研究之后,我无法找到一种方法来将“标签”和“条目”框同时显示在我想要的行中。明确地说,我不希望它出现在屏幕的中央,而应该位于我选择的行的中央。
我尝试了.pack()的一些方法,并使用网格来实现,但似乎什么也做不了。
我这样设置根:
root = tk.Tk()
我这样设置GUI的宽度和高度:
screen_width = str(root.winfo_screenwidth())
screen_height = str(root.winfo_screenheight())
root.geometry(screen_width + "x" + screen_height)
我将标签及其输入框的位置设置如下:
fName = tk.Label(root, text="First Name")
fName.grid(row=0)
lName = tk.Label(root, text="Last Name")
lName.grid(row=1)
ageLabel = tk.Label(root, text="Age")
ageLabel.grid(row=2)
correctedLabel = tk.Label(root, text="Is your vision, or corrected to, 20/20? (Y/N)")
correctedLabel.grid(row=3)
genderLabel = tk.Label(root, text="Gender")
genderLabel.grid(row=4)
e1 = tk.Entry(root)
e2 = tk.Entry(root)
e3 = tk.Entry(root)
e4 = tk.Entry(root)
e5 = tk.Entry(root)
root.winfo_toplevel().title("Information Collection")
e1.grid(row=0, column=1)
e2.grid(row=1, column=1)
e3.grid(row=2, column=1)
e4.grid(row=3, column=1)
e5.grid(row=4, column=1)
使用当前的代码,它将从Tkinter获取屏幕的宽度和高度,并将窗口的大小调整为屏幕大小。同样使用此代码,有人会看到有4个标签及其对应的输入框,我想将每组标签及其输入移动到其行的中心。我将不胜感激。
答案 0 :(得分:0)
您可以从设置weight
中的grid
开始,以调整应该占用的每一行/列的权重:
root.grid_columnconfigure(0,weight=1)
root.grid_columnconfigure(1,weight=1)
现在,您应该看到左右标签均均匀地分布在整个屏幕上,这正是您想要的。如果您想以某种方式使其正确居中,则可以将sticky
方向应用于小部件。
fName.grid(row=0,sticky="e")
...
e1.grid(row=0, column=1,sticky="w")
...
完整样本:
import tkinter as tk
root = tk.Tk()
root.title("Information Collection")
root.geometry(f"{root.winfo_screenwidth()}x{root.winfo_screenheight()}")
labels = ("First Name","Last Name","Age","Is your vision, or corrected to, 20/20? (Y/N)","Gender")
entries = []
for num, i in enumerate(labels):
l = tk.Label(root, text=i)
l.grid(row=num, column=0, sticky="e") #remove sticky if not required
e = tk.Entry(root)
e.grid(row=num, column=1, sticky="w") #remove sticky if not required
entries.append(e) #keep the entries in a list so you can retrieve the values later
root.grid_columnconfigure(0,weight=1)
root.grid_columnconfigure(1,weight=1)
root.mainloop()