#python #user-interface #tkinter
#питон #пользовательский интерфейс #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()
производит это,
но я хочу DELETE
MERGE
, чтобы кнопки и были выровнены по левому краю, чтобы они были вместе с SELECT
кнопкой. Как я могу этого достичь?
Комментарии:
1. Поместите кнопки в новую рамку, которую вы вставили в текущую рамку
Ответ №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()
Редактировать:
Вы также можете добавить столбец empy между Merge
и Close
и назначить weight=1
этому столбцу, чтобы он занимал все пустое место.
Его нужно переместить Browse
и Close
в следующий столбец, и увеличить columnspan
в обоих Text
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()
Комментарии:
1. Я добавил пример со свободной колонкой и
columnconfigure(3, weight=1)