Можно ли уменьшить размер кнопки в tkinter?
Я работаю над небольшим текстовым редактором и в настоящее время делаю кнопки на картинке под кнопкой «B», выделенной жирным шрифтом. Я бы хотел уменьшить его размер, чтобы он соответствовал своему истинному размеру, как квадратная коробка, и избавился от лишнего роста.

Как я могу уменьшить размер, который кажется минимальным по умолчанию? Высота кадра и кнопки установлена на 1 и ожидается целое число, поэтому мне не разрешено опускаться ниже с чем-то вроде 0,5.
3 ответа
Атрибуты width и height выражаются в единицах символов (например: 1 означает размер одного среднего символа). Вы можете указать ширину и высоту в пикселях, если на кнопке есть изображение.
Кнопка может иметь как изображение, так и текст, поэтому простой трюк — добавить в качестве изображения однопиксельный прозрачный пиксель, который затем позволит вам указать размер в пикселях.
Параметры padx и pady также влияют на размер кнопки. Если вы пытаетесь получить точный размер, вам нужно установить его на ноль.
Вот простой пример:

Я думаю, вы могли бы попробовать использовать ttk.Button , присвоить ему ttk.Style и установить размер шрифта:
Настройка кнопки (или любого виджета) в Tkinter выполняется путем вызова метода настройки config.
Чтобы изменить размер кнопки с именем button1, вы просто вызываете
Если вы знаете, какой размер вам нужен при инициализации, эти параметры можно добавить в конструктор.
Динамическое изменение размера кнопок при изменении размера окна с помощью Tkinter
Размер кнопки является статическим, что означает, что размер кнопки не может быть изменен после того, как он определен пользователем. Проблема здесь в том, что при изменении размера окна это может повлиять на проблему с размером кнопки. Итак, решение здесь — сделать динамическую кнопку, что означает, что размер кнопки будет меняться в соответствии с размером окна.
Разберемся с пошаговой реализацией:
Step 1#: Create Normal Tkinter Window
Python3
Выход:-

Шаг 2 #: Добавьте кнопки и установите сетку.
Синтаксис:
Что такое сетка?
Менеджер геометрии grid () организует виджеты в виде таблицы в родительском виджете. Главный виджет разделен на строки и столбцы, и каждая часть таблицы может содержать виджет. Он использует столбец, диапазон столбцов, ipadx, ipady, padx, pady, row, row span и sticky.
Syntax:
Python3
Выход:

Добавить две кнопки
Шаг 3 #: Настройте Columnconfigure и Rowconfigure для изменения размера.
Чтобы затем изменить размер пользовательского интерфейса, нам нужно указать положительный вес для столбцов, которые мы хотим расширить. Это делается с помощью методов сетки Columnconfigure и Rowconfigure. Это относительный вес. Если два столбца имеют одинаковый вес, они будут расширяться с одинаковой скоростью.
Что делать, если ячейка больше виджета. По умолчанию, при sticky = ”виджет центрируется в своей ячейке. Sticky может быть конкатенацией строк из нуля или более из N, E, S, W, NE, NW, SE и SW, направлений компаса, указывающих стороны и углы ячейки, к которой прикрепляется виджет.
Виджеты Button, Label, Entry
В этом уроке рассмотрим подробнее три наиболее простых и популярных виджета GUI – кнопку, метку и однострочное текстовое поле. В tkinter объекты этих элементов интерфейса порождаются соответственно от классов Button , Label и Entry .
Свойства и методы виджетов бывают относительно общими, характерными для многих типов, а также частными, зачастую встречающимися только у какого-то одного класса. В любом случае список настраиваемых свойств велик. В этом курсе мы будем рассматривать только ключевые свойства и методы классов пакета tkinter .
В Tkinter существует три способа конфигурирования свойств виджетов:
- в момент создания объекта,
- с помощью метода config , он же configure ,
- путем обращения к свойству как к элементу словаря.
Button – кнопка
Самыми важными свойствами виджета класса Button являются text , с помощью которого устанавливается надпись на кнопке, и command для установки действия, то есть того, что будет происходить при нажатии на кнопку.
По умолчанию размер кнопки соответствует ширине и высоте текста, однако с помощью свойств width и height эти параметры можно изменить. Единицами измерения в данном случае являются знакоместа.
Такие свойства как bg , fg , activebackground и activeforeground определяют соответственно цвет фона и текста, цвет фона и текста во время нажатия и установки курсора мыши над кнопкой.
Здесь свойство command устанавливается с помощью метода config . Однако можно было сделать и так: b1[‘command’] = change . Вот так будет выглядеть кнопка после запуска программы и после нажатия на нее:
Label – метка
Виджет Label просто отображает текст в окне и служит в основном для информационных целей (вывод сообщений, подпись других элементов интерфейса). Свойства метки во многом схожи с таковыми у кнопки. Однако у меток нет опции command . Поэтому связать их с событием можно только с помощью метода bind .
На примере объекта типа Label рассмотрим свойство font – шрифт.
Значение шрифта можно передать как строку или как кортеж. Второй вариант удобен, если имя шрифта состоит из двух и более слов. После названия шрифта можно указать размер и стиль.
Также как font свойство bd есть не только у метки. С его помощью регулируется размер границ (единица измерения – пиксель):
Бывает, что метки и кнопки не присваивают переменным, если потом к ним в коде не приходится обращаться. Их создают от класса и сразу размещают:
В данном примере только у одной метки есть связь с переменной, так как одно из ее свойств может быть изменено в процессе выполнения программы.
Entry – однострочное текстовое поле
Текстовые поля предназначены для ввода информации пользователем. Однако нередко также для вывода, если предполагается, что текст из них будет скопирован. Текстовые поля как элементы графического интерфейса бывают однострочными и многострочными. В tkinter вторым соответствует класс Text , который будет рассмотрен позже.
Свойства экземпляров Entry во многом схожи с двумя предыдущими виджетами. А вот методы – нет. Из текстового поля можно взять текст. За это действие отвечает метод get . В текстовое поле можно вставить текст методом insert . Также можно удалить текст методом delete .
Метод insert принимает позицию, в которую надо вставлять текст, и сам текст.
приведет к тому, что после каждого нажатия на кнопку будет вставляться новое время пред уже существующей в поле строкой.
Если 0 в insert заменить на константу END , то вставляться будет в конец. Можно указать любое число-индекс знакоместа, тогда вставка будет производиться куда-либо в середину строки.
Метод delete принимает один или два аргумента. В первом случае удаляется один символ в указанной позиции. Во втором – срез между двумя указанными индексами, не включая последний. Если нужно полностью очистить поле, то первым аргументом должен быть 0, вторым – END .
Практическая работа
Напишите программу, состоящую из семи кнопок, цвета которых соответствуют цветам радуги. При нажатии на ту или иную кнопку в текстовое поле должен вставляться код цвета, а в метку – название цвета.
Коды цветов в шестнадцатеричной кодировке: #ff0000 – красный, #ff7d00 – оранжевый, #ffff00 – желтый, #00ff00 – зеленый, #007dff – голубой, #0000ff – синий, #7d00ff – фиолетовый.
Примерно должно получиться так:
Для выравнивания строки по центру в текстовом поле используется свойство justify со значением CENTER .
Курс с примерами решений практических работ: android-приложение, pdf-версия.