Python tkinter 网格管理器不会将按钮放在左侧,sticky = tk.W 或 sticky = 'w'

Python tkinter Grid Manager doesn't place button on left with sticky = tk.W or sticky = 'w'

一个框架内有两个框架,按钮放在顶部框架,sticky=tk.W似乎没有任何效果。

import tkinter as tk
def _exit():
    raise SystemExit

root = tk.Tk()
frame = tk.Frame(root,width = 1200, height = 650, bg = 'Yellow')
top_frame = tk.Frame(frame, width = 1200, height = 50, bg = 'green')
bot_frame = tk.Frame(frame, width = 600, height = 600, bg = 'skyblue') 
exit_button = tk.Button(top_frame, text = 'Exit',
                    command = _exit)
frame.grid()
top_frame.grid(column=0,row=0)
bot_frame.grid(column=0,row=1)
exit_button.grid(column=0,row=0, sticky = tk.W)
                      
root.mainloop()

如果我删除底部框架,便签会起作用:

import tkinter as tk
def _exit():
    raise SystemExit

root = tk.Tk()
frame = tk.Frame(root,width = 1200, height = 650, bg = 'Yellow')
top_frame = tk.Frame(frame, width = 1200, height = 50, bg = 'green')
exit_button = tk.Button(top_frame, text = 'Exit',
                command = _exit)
frame.grid()
top_frame.grid(column=0,row=0)
exit_button.grid(column=0,row=0, sticky = tk.W)

root.mainloop()

当您在 top_frame 中放置一个按钮时,它会缩小以适合按钮。按钮 位于 top_frame 左侧 ,但 top_frame 仅与按钮一样宽,并且位于 space 的中央。因此看起来按钮不在左边,但它是。该按钮位于 top_frame 的左边缘,但 top_frame 位于 frame 的中心。

如果你想让top_frame填充window的宽度(或者分配给它的space的宽度)你需要用sticky配合它,也是。

top_frame.grid(column=0,row=0, sticky="ew")