我想将条目小部件向右对齐,而与左侧标签的宽度无关。Id 标题的宽度应该不重要。无论标题的宽度是多少,条目小部件都应该对齐。
这是我的代码:
import tkinter as tk
from tkinter import ttk
root = tk.Tk()
root.title('test')
root.geometry("500x800")
# main frame
main_frame = tk.Frame(root)
main_frame.pack(expand=1, fill='both')
# the message
title = tk.Label(main_frame, text="title 1", bg='white')
title.pack(padx=8, pady=8, fill='x')
foo1_frame = tk.Frame(main_frame)
foo1_frame.pack(padx=8, pady=8, fill='x')
foo1_label = tk.Label(foo1_frame, text="short title foo1")
foo1_label.grid(row=0, column=0)
foo1_entry_box = tk.Entry(foo1_frame, width=10)
foo1_entry_box.grid(row=0, column=2, sticky='e') #sticky does nothing in this case
foo2_frame = tk.Frame(main_frame)
foo2_frame.pack(padx=8, pady=8, fill='x')
foo2_label = tk.Label(foo2_frame, text="loooooooooooonger title foo2")
foo2_label.grid(row=1, column=0)
foo2_entry_box = tk.Entry(foo2_frame, width=10)
foo2_entry_box.grid(row=1, column=2)
root.mainloop()
Run Code Online (Sandbox Code Playgroud)
我尝试过使用sticky="e"但没有任何改变。我不想使用,pack(side='right')因为如果窗口宽度增加,它会看起来混乱/难看。
Sticky = 'e' 在这种情况下不起作用的原因是因为您没有使用weight. 如果您weight在左侧或右侧(或两者)的列中添加 a ,您的问题应该得到解决。
weight?任何行或列的默认值为weight0。如果您不给行或列任何值weight,它将只占用所需的空间来容纳内部的小部件。但是,如果您为该列指定 a weight,则表示您要求该列占用尽可能多的空间。
直觉:将框架中的可用空间想象成矩形弹性片。通过向不同的行和列添加所需的权重,您可以使工作表在正确的区域按比例展开。
weights到行和列:<containter-widget>.grid_columnconfigure(<column number>, weight = <whole number>)
<containter-widget>.grid_rowconfigure(<row number>, weight = <whole number>)
Run Code Online (Sandbox Code Playgroud)
运行此代码可以更好地理解weights:
from tkinter import *
root = Tk()
#Gridding root column-wise
root.grid_columnconfigure(0, weight = 2)
root.grid_columnconfigure(1, weight = 1)
#Gridding root row-wise
root.grid_rowconfigure(0, weight = 1)
frame_left = Frame(root, bg = "blue")
frame_right = Frame(root, bg = "green")
frame_left.grid(row = 0, column = 0, sticky = NSEW)
frame_right.grid(row = 0, column = 1, sticky = NSEW)
root.mainloop()
Run Code Online (Sandbox Code Playgroud)
尝试调整 的值weights并查看会发生什么变化。