如何在屏幕上传播小部件?

How to spread widgets on screen?

以下是我的示例代码,其中包含三个标签和三个输入字段:

import tkinter as tk
from tkinter import *


root = Tk()
root.resizable(width=False, height=False)
root.geometry("1200x700")

root.iconbitmap(r'.\autocrest.ico')
root.title('Autocrest Job Card')

root.columnconfigure(0, weight=20)

topRowFrame= Frame(root,relief="ridge", width=1000)

topRowFrame.config(bd=1, relief=tk.SUNKEN)

topRowFrame.columnconfigure(0, weight=1)
topRowFrame.columnconfigure(1, weight=4)
topRowFrame.columnconfigure(2, weight=1)
topRowFrame.columnconfigure(3, weight=4)
topRowFrame.columnconfigure(4, weight=1)
topRowFrame.columnconfigure(5, weight=4)

topRowFrame.grid(column=0,row=0, padx=5, pady=5, sticky=W)

bookingIdLabel=tk.Label(topRowFrame, text="Booking ID")
bookingIdLabel.grid(column=0,columnspan=2, row=0, padx=5, pady=5)

bookingIdEntry=Entry(topRowFrame)
bookingIdEntry.grid(column=2,columnspan=2, row=0, padx=5, pady=5)

noLabel=tk.Label(topRowFrame, text="No")
noLabel.grid(column=4,columnspan=2, row=0, padx=5, pady=5)

noEntry=Entry(topRowFrame)
noEntry.grid(column=6,columnspan=2, row=0, padx=5, pady=5)

dateLabel=tk.Label(topRowFrame, text="Date")
dateLabel.grid(column=8,columnspan=2, row=0, padx=5, pady=5)

dateEntry=Entry(topRowFrame)
dateEntry.grid(column=10,columnspan=2, row=0, padx=5, pady=5)


root.mainloop()

以下代码中的所有小部件只占用 space 等于它们的宽度。我想在它们之间增加 space。列跨度和重量没有影响。

Columnspan and weight has no impact.

那是因为你告诉 gridtopRowFrame 只粘在 window 的左边。因此它不会拉伸以填满整列。您对 root.columnconfigure(0, weight=20) 的使用使该列填充 window,但小部件不会填充该列。

如果您希望 topRowFrame 与 window 一样宽,请尝试 sticky 属性的值“ew”(东、西):

topRowFrame.grid(column=0,row=0, padx=5, pady=5, sticky="ew")

为了能够使小部件随着屏幕大小的调整而调整大小,您需要使用 Grid.rowconfigure(root, index=0, weight=1)。 Root 是 window/frame 的名称,index 是行号,权重应设置为 1。您需要复制并粘贴这行代码并更改下一行的 index 或使用 for loop像这样:

number_of_rows = 5
for i in range(number_of_rows):
   Grid.rowconfigure(root, index=i, weight=1)

并对具有 Grid.columnconfigure() 的列应用相同的方法。 完成后,将 sticky="NSEW" 粘贴到 window 的每一侧并填充它。