отступы в tkinter
При добавлении кнопки в строчку с лейблами увеличиваются отступы.
Если убрать кнопку btn, то отступы уменьшатся.
Как это исправить?
from tkinter import *
from ttkthemes import ThemedTk
import tkinter.ttk as ttk
def size(w,h,qframe):
qframe.resizable(width=False, height=False)
ws = qframe.winfo_screenwidth()
hs = qframe.winfo_screenheight()
x = (ws/2) - (w/2)
y = (hs/2) - (h/2)
qframe.geometry('%dx%d+%d+%d' % (w, h, x, y))
root = ThemedTk()
root.title('DB')
root.set_theme("breeze")
w = 850
h = 600
size(w,h,root)
main = Frame(root)
main.grid()
boldStyle = ttk.Style ()
boldStyle.configure("Bold.TButton", font = ('Arial','14'))
num = ttk.Label(main,text='fdsfdsfsf',font='Arial 16',background='#b3b4bc',width=12,anchor='w').grid(row=1,column=0,sticky=W,pady=(5,0),padx=2)
type = ttk.Label(main,text='sadasdasd',font='Arial 16',background='#b3b4bc',width=10).grid(row=1,column=1,sticky=W,pady=(5,0))
cab = ttk.Label(main,text='dsasdasda',font='Arial 16',background='#b3b4bc',width=7,anchor='w').grid(row=1,column=2,sticky=W,pady=(5,0),padx=2)
status = ttk.Label(main,text='dasdasdsa',font='Arial 16',background='#b3b4bc',width=7).grid(row=1,column=4,sticky=W,pady=(5,0))
data = ttk.Label(main,text='dasdsadas',font='Arial 16',background='#b3b4bc',width=14).grid(row=1,column=5,sticky=W,pady=(5,0),padx=(2,0))
btn = ttk.Button(main,text='fdsfsdfs',style = 'Bold.TButton',width=11).grid(row=1,column=6,sticky=W,pady=(10,0),padx=(2,0))
root.mainloop()
Ответы (2 шт):
Сделайте кнопке такой же вертикальный отступ (pady) как у других виджетов в строке ((5,0) вместо (10,0)), тогда не будет увеличиваться:
btn = ttk.Button(main,text='fdsfsdfs',style = 'Bold.TButton',width=11)
btn.grid(row=1,column=6,sticky=W,pady=(5,0),padx=(2,0))
Если проблема в том, что Button получается выше чем Label-ы, то можно в параметр sticky добавить NS, чтобы Label-ы расширялись под максимальную высоту строки сетки (ну и pady тоже сделать везде одинаковым, иначе кнопка по высоте будет ниже, чем метки):
num = ttk.Label(main,text='fdsfdsfsf',font='Arial 16',background='#b3b4bc',width=12,anchor='w').grid(row=1,column=0,sticky=W+NS,pady=(5,0),padx=2)
type = ttk.Label(main,text='sadasdasd',font='Arial 16',background='#b3b4bc',width=10).grid(row=1,column=1,sticky=W+NS,pady=(5,0))
cab = ttk.Label(main,text='dsasdasda',font='Arial 16',background='#b3b4bc',width=7,anchor='w').grid(row=1,column=2,sticky=W+NS,pady=(5,0),padx=2)
status = ttk.Label(main,text='dasdasdsa',font='Arial 16',background='#b3b4bc',width=7).grid(row=1,column=4,sticky=W+NS,pady=(5,0))
data = ttk.Label(main,text='dasdsadas',font='Arial 16',background='#b3b4bc',width=14).grid(row=1,column=5,sticky=W+NS,pady=(5,0),padx=(2,0))
btn = ttk.Button(main,text='fdsfsdfs',style = 'Bold.TButton',width=11).grid(row=1,column=6,sticky=W+NS,pady=(5,0),padx=(2,0))
sticky=W+NS можно заменить на sticky='wns'
Кстати, лучше разделять запись виджетов в переменную и их размещение с помощью grid/pack/place: сейчас у вас в переменные записывается не виджет, а то что возвращает метод grid - а это всегда None.
В общем разобрался сам.
Так как кнопка по ширине больше, чем лейбл, она ставит свою ширину для строчки.
Поэтому можно кнопке дать 2 строчки с помощью rowspan
btn.grid(row=1,rowspan=2,column=6,sticky=W,pady=(5,0),padx=(2,0))

