Если у кнопки есть изображение, ширина и высота указываются в пикселях. Если у него нет изображения, ширина и высота указываются в количестве символов на основе размера символа «0» (ноль) шрифта, который использует кнопка. Если в нем есть изображение и текст, значения указываются в пикселях.
Использование невидимого изображения
Одним из решений является предоставление ему невидимого изображения, чтобы атрибуты обрабатывались как пиксели. Кнопки по-прежнему не будут иметь такого точного размера из-за дополнительных украшений, таких как рамка и кольцо подсветки. Если вам нужен точный размер, вам нужно также установить эти параметры на ноль или настроить ширину, чтобы учитывать ширину границ.
Пример:
from tkinter import *
import tkinter as tk
root = tk.Tk()
root.geometry("960x600")
null_image = tk.PhotoImage(width=0, height=0)
button_qwer = Button(root, text="asdfasdf", width="10", height="10",
image=null_image, compound="center", borderwidth=0,
highlightthickness=0, padx=0, pady=0)
button_asdf = Button(root, text="asdfasdf", width="20", height="20",
image=null_image, compound="center", borderwidth=0,
highlightthickness=0, padx=0, pady=0)
button_zxcv = Button(root, text="asdfasdf", width="30", height="30",
image=null_image, compound="center", borderwidth=0,
highlightthickness=0, padx=0, pady=0)
button_qwer.grid(row=0, column=0)
button_asdf.grid(row=0, column=1)
button_zxcv.grid(row=0, column=2)
root.mainloop()
Использование рамки
Другим решением было бы создать рамку с определенным размером, а затем использовать place
, чтобы поместить кнопку в рамку так, чтобы она заполняла рамку.
Пример:
from tkinter import *
import tkinter as tk
root = tk.Tk()
root.geometry("960x600")
f1 = tk.Frame(root, width=10, height=10)
f2 = tk.Frame(root, width=20, height=20)
f3 = tk.Frame(root, width=30, height=30)
f1.grid(row=0, column=0)
f2.grid(row=0, column=1)
f3.grid(row=0, column=2)
button_qwer = Button(f1, text="asdfasdf")
button_asdf = Button(f2, text="asdfasdf")
button_zxcv = Button(f3, text="asdfasdf")
button_qwer.place(x=0, y=0, relwidth=1, relheight=1)
button_asdf.place(x=0, y=0, relwidth=1, relheight=1)
button_zxcv.place(x=0, y=0, relwidth=1, relheight=1)
root.mainloop()