如何在屏幕上传播小部件?
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.
那是因为你告诉 grid
让 topRowFrame
只粘在 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 的每一侧并填充它。
以下是我的示例代码,其中包含三个标签和三个输入字段:
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.
那是因为你告诉 grid
让 topRowFrame
只粘在 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 的每一侧并填充它。