如何在 tkinter 中左对齐按钮?

How do I left-align buttons in tkinter?

以下代码

root = tk.Tk()
frame = ttk.Frame(root, padding=10)
frame.grid()

# Browse
tk.Text(frame, state="disabled", height=1).grid(column=0, row=0, columnspan=3, sticky="W", pady=5, ipadx=2, ipady=2)
ttk.Button(frame, text="Browse", command=None).grid(column=3, row=0, sticky="E")

# Selected files
tk.Text(frame, state="disabled").grid(column=0, row=1, columnspan=4, sticky="EW", pady=10)

# Options
ttk.Button(frame, text="SELECT", command=None).grid(column=0, row=2, sticky="W")
ttk.Button(frame, text="DELETE", command=None).grid(column=1, row=2, sticky="W")
ttk.Button(frame, text="Merge", command=None).grid(column=2, row=2, sticky="W")

ttk.Button(frame, text="Close", command=root.destroy).grid(column=3, row=2, sticky="E")

root.mainloop()

产生这个,

但我希望 DELETEMERGE 按钮左对齐,以便它们与 SELECT 按钮一起。我怎样才能做到这一点?

将按钮放入新框架中,将此框架放入原始框架中

buttons_frame = ttk.Frame(frame)
buttons_frame.grid(column=0, row=2, sticky="W")

ttk.Button(buttons_frame, text="SELECT", command=None).grid(column=0, row=2, sticky="W")
ttk.Button(buttons_frame, text="DELETE", command=None).grid(column=1, row=2, sticky="W")
ttk.Button(buttons_frame, text="Merge", command=None).grid(column=2, row=2, sticky="W")

顺便说一句:

buttons_frame 中你甚至可以使用 .pack(side='left') 而不是 grid()


完整代码:

import tkinter as tk
import tkinter.ttk as ttk

root = tk.Tk()
frame = ttk.Frame(root, padding=10)
frame.grid()

# Browse
tk.Text(frame, state="disabled", height=1).grid(column=0, row=0, columnspan=3, sticky="W", pady=5, ipadx=2, ipady=2)
ttk.Button(frame, text="Browse", command=None).grid(column=3, row=0, sticky="E")

# Selected files
tk.Text(frame, state="disabled").grid(column=0, row=1, columnspan=4, sticky="EW", pady=10)

# Options
buttons_frame = ttk.Frame(frame)
buttons_frame.grid(column=0, row=2, sticky="W")
ttk.Button(buttons_frame, text="SELECT", command=None).grid(column=0, row=2, sticky="W")
ttk.Button(buttons_frame, text="DELETE", command=None).grid(column=1, row=2, sticky="W")
ttk.Button(buttons_frame, text="Merge", command=None).grid(column=2, row=2, sticky="W")

ttk.Button(frame, text="Close", command=root.destroy).grid(column=3, row=2, sticky="E")

root.mainloop()

编辑:

您还可以在 MergeClose 之间添加空列,并将 weight=1 分配给该列,这样它将全部为空 space.

需要将BrowseClose移动到下一列,并在Text

中增加columnspan
import tkinter as tk
import tkinter.ttk as ttk

root = tk.Tk()
frame = ttk.Frame(root, padding=10)
frame.grid()

frame.columnconfigure(3, weight=1)  # column 3 will use all free space

# Browse
tk.Text(frame, state="disabled", height=1).grid(column=0, row=0, columnspan=4, sticky="W", pady=5, ipadx=2, ipady=2)
ttk.Button(frame, text="Browse", command=None).grid(column=4, row=0, sticky="E")

# Selected files
tk.Text(frame, state="disabled").grid(column=0, row=1, columnspan=5, sticky="EW", pady=10)

# Options
ttk.Button(frame, text="SELECT", command=None).grid(column=0, row=2, sticky="W")
ttk.Button(frame, text="DELETE", command=None).grid(column=1, row=2, sticky="W")
ttk.Button(frame, text="Merge", command=None).grid(column=2, row=2, sticky="W")

ttk.Button(frame, text="Close", command=root.destroy).grid(column=4, row=2, sticky="E")

root.mainloop()