【问题标题】:How do I left-align buttons in tkinter?如何在 tkinter 中左对齐按钮?
【发布时间】:2022-01-05 12:43:59
【问题描述】:

以下代码

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 按钮一起使用。我怎样才能做到这一点?

【问题讨论】:

  • 将按钮放入您放入当前框架的新框架中

标签: python user-interface tkinter


【解决方案1】:

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

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 之间添加 empy 列,并将 weight=1 分配给该列,这样它就会得到所有空白空间。

需要将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()

【讨论】:

  • 我添加了带有免费列的示例和columnconfigure(3, weight=1)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-10
  • 2017-11-01
  • 2012-11-13
  • 1970-01-01
  • 2021-01-20
相关资源
最近更新 更多