Почему настройка ширины фрейма отличается от метки?

(Windows 7, Python 2.7.3)

Вот мой код:

from Tkinter import *

root = Tk()
root.geometry('400x400')
Frame(root, width=20, height=20, bg='red').pack(expand=NO, fill=None, side=LEFT)
Label(root, width=20, height=20, bg='black').pack(expand=NO, fill=None, side=LEFT)
root.mainloop()

И результат такой:

Я установил одинаковую ширину и высоту для рамки и метки, но они показывают разный размер. Более того, этикетка даже не квадратная. Пожалуйста, объясните мне и покажите, как сделать их одинакового размера.

2 ответа

Решение

Короткий ответ:

20 - это то же самое, что и 20, но 20 метров - это не то же самое, что 20 километров.

Длинный ответ:

Результат, который вы получили, не такой странный, как вы думаете, потому что width а также height варианты Tkinter.Frame() измеряются в терминах пикселей, тогда как в Tkinter.Label():

  • width: определяет ширину метки в символах
  • height: определяет высоту метки в строках

Ссылка.

Как я знаю, Label используется для текста. Определение Label() и Frame() могут работать по-разному для параметров ширины и высоты, поправьте меня, если я не прав.

пример: измените ширину и высоту внутри Label() на 1. Вы увидите пространство для одного символа, заполненного черным цветом в окне tk.

лайк

Label(root, width=1, height=1, bg='black').pack(expand=NO, fill=None, side=LEFT)

Другие вопросы по тегам