поле для ввода tkinter

Text – многострочное текстовое поле

В этом уроке рассмотрим, как с помощью Tkinter запрограммировать такой элемент интерфейса как многострочное текстовое поле. Этот виджет часто встречается при заполнении веб-форм. В приложениях для десктопов он редок, если не считать программы «Терминал», где по-сути вы работаете в большом текстовом поле.

Значение WORD опции wrap позволяет переносить слова на новую строку целиком, а не по буквам.

Text и Scrollbar

Если в текстовое поле вводится больше линий текста, чем его высота, то оно само будет прокручиваться вниз. При просмотре прокручивать вверх-вниз можно с помощью колеса мыши и стрелками на клавиатуре. Однако бывает удобнее пользоваться скроллером – полосой прокрутки.

Методы Text

Методы get и delete могут принимать не два, а один аргумент. В таком случае будет обрабатываться только один символ в указанной позиции.

Вставка виджетов в текстовое поле

Размещение метки в функции позволяет каждый раз при вызове функции создавать новую метку. Иначе, если бы метка была в основной ветке программы, предыдущая исчезала бы.

Практическая работа

Файлы будут читаться и записываться в том же каталоге, что и файл скрипта, если указывать имена файлов без адреса.

Для выполнения практической работы вам понадобится функция open языка Python и методы файловых объектов чтения и записи. Освежить знания о них можно здесь.

Курс с примерами решений практических работ: android-приложение, pdf-версия.

Источник

Python Tkinter Entry – How to use

In this Python tutorial, we will discuss in detail on Python tkinter entry.

Python Tkinter Entry

In Python, if you want to take user input in terms of single-line strings, then we should use Python Tkinter Entry. Let us check more on it.

Also, if you are new to Python GUI programming, check out the article Python GUI Programming (Python Tkinter) and How to create a Python Calculator using Tkinter.

Tkinter entry widget

Tkinter entry default value

Code:

Output: The output displays that text already mentioned in the textbox.

2. textvariable

Code:

Output: In this output, if the user will not provide any information than ‘not available’ will be taken as default input’

Tkinter entry placeholder

Python Tkinter entry set text

Code:

In this code, there is a game in which you have to find a ring. Clicking on one of the box will get you a ring. Choose wisely.

Output:

Python Tkinter entry get text

Code:

In this example, the User is providing his name, and the program prints the welcome message with his name.

Output:

In this output, User has provided name as ‘Alpha’. Program is using this name to send a greeting message with the name.

Python Tkinter entry height

Code:

Output:

Entry box is single lined but in this example the white space is entry line. It can take multi-line input.

PythonTkinter entry textvariable

Code:

Output: In this output, if the user will not provide any information than ‘not available’ will be taken as default input’

Python Tkinter entry command on enter

Example:

Code:

Output:

So here, there is no button to trigger the function. User entered the name ‘Alpha’ and pressed enter. and the output greets him with his name.

You may like the following Python tutorials:

In this tutorial, we have studied entry widget in Python in details also we have covered these topics.

поле для ввода tkinter. Смотреть фото поле для ввода tkinter. Смотреть картинку поле для ввода tkinter. Картинка про поле для ввода tkinter. Фото поле для ввода tkinter

Entrepreneur, Founder, Author, Blogger, Trainer, and more. Check out my profile.

Источник

Tkinter – примеры и руководство как делать GUI на Python

В этом руководстве мы научимся разрабатывать графические интерфейсы пользователя (GUI), написав несколько примеров GUI на Python с использованием пакета Tkinter.

Пакет Tkinter включен в Python как стандартный, поэтому вам не нужно ничего устанавливать для его использования.

Я предполагаю, что у вас есть некоторые базовые знания Python, которые помогут вам понять, что мы делаем.

Мы начнем с создания окна, затем научимся добавлять виджеты, такие как кнопки, комбобоксы и т.д., а затем поиграем с их свойствами. Итак, поехали.

Создайте свое первое приложение с графическим интерфейсом

Сначала мы импортируем пакет Tkinter, создадим окно и зададим его заголовок:

поле для ввода tkinter. Смотреть фото поле для ввода tkinter. Смотреть картинку поле для ввода tkinter. Картинка про поле для ввода tkinter. Фото поле для ввода tkinter

Невероятно! Наше приложение работает.

Последняя строка вызывает функцию mainloop. Эта функция запускает бесконечный цикл окна, поэтому оно будет открыто, пока мы его сами не закроем.

Если вы забудете вызвать функцию mainloop, пользователю ничего не будет показано.

Создание виджета label

Чтобы добавить метку к нашему предыдущему примеру, мы создадим ее с помощью класса label:

Затем мы установим его положение с помощью функции grid вот так:

Итоговый код будет выглядеть следующим образом:

поле для ввода tkinter. Смотреть фото поле для ввода tkinter. Смотреть картинку поле для ввода tkinter. Картинка про поле для ввода tkinter. Фото поле для ввода tkinter

Без вызова функции grid для label метка не появится.

Установка размера шрифта метки

Вы можете настроить шрифт метки, чтобы сделать его более крупным или, возможно, жирным. Кроме того, можно изменить стиль шрифта.

Для этого передайте дополнительный параметр font:

поле для ввода tkinter. Смотреть фото поле для ввода tkinter. Смотреть картинку поле для ввода tkinter. Картинка про поле для ввода tkinter. Фото поле для ввода tkinter

Следует отметить, что параметр font может быть передан любому виджету для изменения его шрифта, а не только меткам.

Все замечательно. Но окно настолько маленькое, что мы даже не видим заголовок. Как установить размер окна?

Установка размера окна

Мы можем установить размер окна по умолчанию, используя функцию geometry:

Приведенная выше строка устанавливает ширину окна в 350 пикселей и высоту в 200 пикселей.

поле для ввода tkinter. Смотреть фото поле для ввода tkinter. Смотреть картинку поле для ввода tkinter. Картинка про поле для ввода tkinter. Фото поле для ввода tkinter

Давайте попробуем добавить больше виджетов в виде кнопок и посмотрим, как обрабатывать событие нажатия на кнопку.

Добавление виджета кнопки

Давайте начнем с добавления кнопки на окно. Кнопка создается и добавляется так же, как и метка:

В результате код будет выглядеть следующим образом:

Результат будет выглядеть так:

поле для ввода tkinter. Смотреть фото поле для ввода tkinter. Смотреть картинку поле для ввода tkinter. Картинка про поле для ввода tkinter. Фото поле для ввода tkinter

Обратите внимание, что мы размещаем кнопку во втором столбце окна, то есть в столбце 1. Если забыть об этом и поместить кнопку в тот же столбец (в данном случае 0), то будет отображаться только кнопка, так как кнопка будет находиться над меткой.

Изменение цвета фона и шрифта кнопки.

Вы можете изменить цвет текста кнопки или любого другого виджета с помощью свойства fg.

Также с помощью свойства bg можно изменить цвет фона любого виджета.

поле для ввода tkinter. Смотреть фото поле для ввода tkinter. Смотреть картинку поле для ввода tkinter. Картинка про поле для ввода tkinter. Фото поле для ввода tkinter

Сейчас, если вы попытаетесь нажать на кнопку, ничего не произойдет, потому что событие нажатия кнопки еще не задано.

Обработка события нажатия кнопки

Сначала мы напишем функцию, которая должна выполняться при нажатии на кнопку:

Затем мы свяжем её с кнопкой, указав функцию следующим образом:

Обратите внимание, что мы пишем просто clicked, а не clicked() со скобками.

Теперь весь код будет выглядеть следующим образом:

Когда мы жмем на кнопку, то получаем нужный результат:

поле для ввода tkinter. Смотреть фото поле для ввода tkinter. Смотреть картинку поле для ввода tkinter. Картинка про поле для ввода tkinter. Фото поле для ввода tkinter

Ввод данных с помощью класса Entry (текстовое поле Tkinter)

В предыдущих примерах графического интерфейса Python мы рассмотрели, как добавлять простые виджеты. Теперь давайте попробуем получить данные от пользователя, используя класс Tkinter Entry (текстовое поле Tkinter).

Вы можете создать текстовое поле с помощью класса Tkinter Entry следующим образом:

Далее вы можете добавить виджет в окно с помощью функции grid, как и раньше.

Наш код будет выглядеть так::

Результат будет следующим:

поле для ввода tkinter. Смотреть фото поле для ввода tkinter. Смотреть картинку поле для ввода tkinter. Картинка про поле для ввода tkinter. Фото поле для ввода tkinter

Теперь, если вы нажмете на кнопку, будет выведено то же сообщение, что и выше. Как насчет показа текста, набранного в виджете ввода?

Мы можем получить введенный текст с помощью функции get. Затем мы можем добавить его в нашу функцию clicked, например, так:

Если вы нажмете на кнопку и в виджете ввода будет текст, он покажет “Добро пожаловать, “, соединенный с введенным текстом.

Запустите приведенный выше код и проверьте результат:

поле для ввода tkinter. Смотреть фото поле для ввода tkinter. Смотреть картинку поле для ввода tkinter. Картинка про поле для ввода tkinter. Фото поле для ввода tkinter

Каждый раз, когда мы запускаем код, мы должны кликнуть на виджет ввода, чтобы установить фокус для написания текста. Давайте попробуем установить фокус автоматически?

Установка фокуса на виджете ввода

Это очень просто, все, что нам нужно сделать, это вызвать функцию focus:

Когда вы запустите код, вы заметите, что вы можете сразу же набирать текст – курсор установится в поле автоматически.

Отключение виджета ввода

Чтобы отключить виджет ввода, можно установить свойство state в значение disabled:

поле для ввода tkinter. Смотреть фото поле для ввода tkinter. Смотреть картинку поле для ввода tkinter. Картинка про поле для ввода tkinter. Фото поле для ввода tkinter

Теперь вы больше не можете вводить никакой текст.

Добавление виджета combobox

Чтобы добавить виджет combobox, можно использовать класс Combobox из библиотеки ttk, как показано ниже:

Затем вы можете добавить значения в список.

поле для ввода tkinter. Смотреть фото поле для ввода tkinter. Смотреть картинку поле для ввода tkinter. Картинка про поле для ввода tkinter. Фото поле для ввода tkinter

Как вы видите, мы добавляем элементы combobox, используя кортеж значений.

Чтобы установить выбранный элемент, можно передать индекс нужного элемента функцию current.

Чтобы получить выбранный элемент, можно использовать функцию get, как показано ниже:

Добавление виджета Checkbutton (Tkinter checkbox)

Чтобы создать виджет Checkbutton, вы можете использовать класс Checkbutton:

Кроме того, вы можете установить состояние “checked”, передав значение активации кнопке Checkbutton, как показано ниже:

поле для ввода tkinter. Смотреть фото поле для ввода tkinter. Смотреть картинку поле для ввода tkinter. Картинка про поле для ввода tkinter. Фото поле для ввода tkinter

Установка состояния Checkbutton

Здесь мы создаем переменную типа BooleanVar, которая не является стандартной переменной Python, это переменная Tkinter. Затем мы передаем его в класс Checkbutton для установки состояния галочки, как показано выше. Вы можете установить булево значение false, чтобы отключить отметку.

Также вы можете использовать IntVar вместо BooleanVar и установить значение 0 или 1.

Добавление виджета radio button

Чтобы их добавить, вы можете использовать класс RadioButton, как показано ниже:

Обратите внимание, что вы должны установить для каждой радиокнопки свое значение, иначе они не будут работать.

Результат выполнения приведенного выше кода выглядит следующим образом:

поле для ввода tkinter. Смотреть фото поле для ввода tkinter. Смотреть картинку поле для ввода tkinter. Картинка про поле для ввода tkinter. Фото поле для ввода tkinter

Кроме того, вы можете установить команду любой из этих радиокнопок на определенную функцию, так что если пользователь нажмет на любую из них, она выполнит код назначенной функции.

Получить значение радиокнопки (выбранный вариант)

Чтобы получить текущую выбранную радиокнопку или значение радиокнопки, вы можете передать радиокнопкам параметр variable, а затем взять его значение.

поле для ввода tkinter. Смотреть фото поле для ввода tkinter. Смотреть картинку поле для ввода tkinter. Картинка про поле для ввода tkinter. Фото поле для ввода tkinter

Добавление виджета ScrolledText (Tkinter textarea)

Чтобы добавить виджет ScrolledText, вы можете использовать класс ScrolledText, как показано ниже:

Мы указываем ширину и высоту виджета, иначе он заполнит все окно.

поле для ввода tkinter. Смотреть фото поле для ввода tkinter. Смотреть картинку поле для ввода tkinter. Картинка про поле для ввода tkinter. Фото поле для ввода tkinter

Установка содержимого scrolledtext.

Чтобы задать содержимое у scrolledtext, можно использовать метод insert, как показано ниже:

Удаление/очистка содержимого scrolledtext

Чтобы удалить содержимое виджета с прокруткой текста, можно использовать метод delete, как показано ниже:

Создание MessageBox

Чтобы отобразить окно сообщения с помощью Tkinter, вы можете использовать библиотеку messagebox, как показано ниже:

Покажем сообщение, когда пользователь нажмет на кнопку.

поле для ввода tkinter. Смотреть фото поле для ввода tkinter. Смотреть картинку поле для ввода tkinter. Картинка про поле для ввода tkinter. Фото поле для ввода tkinter

Когда вы нажмете на кнопку, появится информационное окно с сообщением.

Отображение сообщений об ошибках и предупреждений

Таким же можно отобразить предупреждающее сообщение или сообщение об ошибке. Единственное, что необходимо изменить messagebox.showinfo на messagebox.showwarning или messagebox.showerror.

Отображение диалоговых окон с вопросами и ответами

Чтобы отобразить пользователю окно сообщения “да/нет”, можно использовать одну из следующих функций messagebox:

Вы можете выбрать подходящий стиль сообщения в соответствии с вашей задачей. Просто замените функцию showinfo в приведенном выше коде и запустите ее.

Вы также можете проверить, какую кнопку нажал пользователь, используя переменную result.

Если вы нажмете OK, или “да”, или “повторить попытку”, то вернется True, а если вы выберете “нет” или “отмена”, то вернется False.

Добавление SpinBox (виджет чисел)

Чтобы создать данный виджет, вы можете использовать класс Spinbox, как показано ниже:

Здесь мы создаем виджет Spinbox и передаем параметры from_ и to, чтобы указать диапазон чисел для Spinbox.

Кроме того, вы можете указать ширину виджета с помощью параметра width:

Давайте посмотрим весь пример:

поле для ввода tkinter. Смотреть фото поле для ввода tkinter. Смотреть картинку поле для ввода tkinter. Картинка про поле для ввода tkinter. Фото поле для ввода tkinter

Вы можете указать числа для Spinbox вместо использования всего диапазона, например, так:

В результате виджет Spinbox покажет только 3 числа: 3, 8 и 11.

Установка значения по умолчанию для Spinbox

Чтобы установить значение по умолчанию для Spinbox, вы можете передать его в параметр textvariable, как показано ниже:

Теперь, если вы запустите программу, Spinbox отобразит значение по умолчанию 36.

Добавление виджета Progressbar

Чтобы создать прогресс-бар, вы можете использовать класс progressbar, как показано ниже:

Значение шкалы можно задать следующим образом:

Вы можете установить это значение в соответствии с нужным вам процессом, например, загрузкой файла или выполнением задачи.

Изменение цвета Progressbar

Изменение цвета прогрессбара сначала кажется немного сложным, но на самом деле это очень просто.

Сперва мы создадим стиль, затем в этом стиле установим цвет фона, и, наконец, присвоим стиль Progressbar’у.

Посмотрите следующий пример:

Результат будет выглядеть так:

поле для ввода tkinter. Смотреть фото поле для ввода tkinter. Смотреть картинку поле для ввода tkinter. Картинка про поле для ввода tkinter. Фото поле для ввода tkinter

Окно добавления файла (выбор файла и каталога).

Для создания такого окна вы можете использовать класс filedialog, как показано ниже:

После выбора файла и нажатия кнопки открыть, в переменной будет указан путь к файлу.

Вы также можете выбрать несколько файлов:

Указание типов файлов (фильтр по расширению)

Вы можете указать типы файлов с помощью параметра filetypes, который задает расширение в кортежах.

Директорию можно получить с помощью метода askdirectory:

Вы можете указать начальный каталог, указав initialdir:

Добавление меню

Чтобы добавить меню, вы можете использовать класс menu:

Сначала мы создадим меню. Затем мы добавляем нашу первую метку. После этого мы назначаем меню окну.

Вы можете добавить пункты в любое меню с помощью функции add_cascade(), например, так:

Наш код будет выглядеть так:

поле для ввода tkinter. Смотреть фото поле для ввода tkinter. Смотреть картинку поле для ввода tkinter. Картинка про поле для ввода tkinter. Фото поле для ввода tkinter

Вы можете добавить столько пунктов, сколько захотите.

поле для ввода tkinter. Смотреть фото поле для ввода tkinter. Смотреть картинку поле для ввода tkinter. Картинка про поле для ввода tkinter. Фото поле для ввода tkinter

Здесь мы добавим еще один пункт меню под названием “Редактировать” с разделителем.

Вы можете отключить пунктирную линию в верхней части выпадающего списка:

Вы можете написать любой код, который срабатывает при нажатии пользователем на любой пункт меню, указав свойство command.

Добавление виджета Notebook (элемент управления вкладками)

Чтобы создать блок управления вкладками, необходимо выполнить три шага.

поле для ввода tkinter. Смотреть фото поле для ввода tkinter. Смотреть картинку поле для ввода tkinter. Картинка про поле для ввода tkinter. Фото поле для ввода tkinter

Вы можете добавить столько вкладок, сколько захотите.

Добавление виджетов на вкладки

После создания вкладок вы можете разместить виджеты внутри них, назначив родительское свойство нужной вкладке.

поле для ввода tkinter. Смотреть фото поле для ввода tkinter. Смотреть картинку поле для ввода tkinter. Картинка про поле для ввода tkinter. Фото поле для ввода tkinter

поле для ввода tkinter. Смотреть фото поле для ввода tkinter. Смотреть картинку поле для ввода tkinter. Картинка про поле для ввода tkinter. Фото поле для ввода tkinter

Добавление отступов у виджетов (spacing или padding)

Вы можете добавить отступы элементам, чтобы они выглядели красиво скомпонованными, используя свойства padx и pady.

Просто передайте padx и pady любому виджету и присвойте им значение.

В этом руководстве мы рассмотрели множество примеров графических интерфейсов Python, использующих библиотеку Tkinter, и увидели, насколько просто разрабатывать GUI с ее помощью.

Надеюсь, эти примеры будут вам полезны.

Похожие записи

поле для ввода tkinter. Смотреть фото поле для ввода tkinter. Смотреть картинку поле для ввода tkinter. Картинка про поле для ввода tkinter. Фото поле для ввода tkinter

Сравнивать даты в Python очень просто. Для этого достаточно использовать операторы сравнения. В этой статье…

поле для ввода tkinter. Смотреть фото поле для ввода tkinter. Смотреть картинку поле для ввода tkinter. Картинка про поле для ввода tkinter. Фото поле для ввода tkinter

Некоторое время назад у меня возникла ошибка при вызове https-адреса в pyhon. После долгих поисков…

поле для ввода tkinter. Смотреть фото поле для ввода tkinter. Смотреть картинку поле для ввода tkinter. Картинка про поле для ввода tkinter. Фото поле для ввода tkinter

В этой статье о Python мы рассмотрим, как получить наименьшее общее кратное (НОК) двух чисел.…

Источник

Создание макетов окна / tkinter 5

Виджеты определяют, какие действия смогут выполнять пользователи с помощью графического интерфейса. Однако важно обращать внимание на их взаимное и индивидуальное расположение. Эффективные макеты позволяют интуитивно определять значение и приоритетность каждого графического элемента, так что пользователь способен быстро разобраться, как нужно взаимодействовать с программой.

Макет также определяет внешний вид, который должен прослеживаться во всем приложении. Например, если кнопки расположены в правом верхнем углу, то они должны находиться там всегда. Хотя это может казаться очевидным для разработчиков, конечные пользователи будут путаться, если не провести их по приложению.

В этом материале погрузимся в разные механизмы, которые Tkinter предлагает для формирования макета, группировки виджетов и управления другими атрибутами, например, размером и отступами.

Группировка виджетов с фреймами

Фрейм представляет собой прямоугольную область окна, обычно используемую в сложных макетах. В них содержатся другие виджеты. Поскольку у фреймов есть собственные внутренние отступы, рамки и фон, то нужно отметить, что группа виджетов связана логически.

Еще одна распространенная особенность фреймов — инкапсуляция части функциональности приложения таким образом, что с помощью абстракции можно спрятать детали реализации дочерних виджетов.

Дальше будут рассмотрены оба сценария на примере создания компонента, который наследует класс Frame и раскрывает определенную информацию о включенных виджетах.

Создадим приложение, которое будет включать два списка, где первый — это список элементов, а второй изначально пустой. Оба можно пролистывать. Также есть возможность перемещать элементы между ними с помощью двух кнопок по центру:

поле для ввода tkinter. Смотреть фото поле для ввода tkinter. Смотреть картинку поле для ввода tkinter. Картинка про поле для ввода tkinter. Фото поле для ввода tkinter

Как работает группировка виджетов

Эти методы используются в родительском классе для перемещения элемента из одного списка в другой:

Также можно воспользоваться особенностями контейнеров родительского фрейма, чтобы правильно размещать их с нужными внутренними отступами:

Благодаря фреймам вызовы управлять геометрией макетов проще.

Еще одно преимущество такого подхода — возможность использовать geometry manager в контейнерах каждого виджета. Это могут быть grid() для виджетов во фрейме или pack() для укладывания фрейма в основном окне.

Однако смешивать эти менеджеры в одном контейнере в Tkinter запрещено. Из-за этого приложение просто не будет работать.

Geometry manager Pack

Это один из трех доступных в Tkinter менеджеров и он отлично подходит для простых макетов, как в случае, когда, например, нужно разместить все друг над другом или рядом.

Предположим, что нужно получить следующий макет для приложения:

поле для ввода tkinter. Смотреть фото поле для ввода tkinter. Смотреть картинку поле для ввода tkinter. Картинка про поле для ввода tkinter. Фото поле для ввода tkinter

Он состоит из трех строк, где в последней есть три виджета, расположенных рядом друг с другом. В таком случае Pack сможет добавить виджеты как требуется без использования дополнительных фреймов.

Для этого будут использоваться пять виджетов Label с разными текстом и фоном, что поможет различать каждую прямоугольную область:

Также были добавлены параметры в словаре opts . Они делают яснее размеры каждой области:

поле для ввода tkinter. Смотреть фото поле для ввода tkinter. Смотреть картинку поле для ввода tkinter. Картинка про поле для ввода tkinter. Фото поле для ввода tkinter

Как работает Pack

Чтобы лучше понимать принципы работы Pack, разберем пошагово, как виджеты добавляются в родительский контейнер. Стоит обратить особое внимание на значение параметра side , который определяет относительное положение виджета по отношению к следующему в этом же контейнере.

поле для ввода tkinter. Смотреть фото поле для ввода tkinter. Смотреть картинку поле для ввода tkinter. Картинка про поле для ввода tkinter. Фото поле для ввода tkinter

поле для ввода tkinter. Смотреть фото поле для ввода tkinter. Смотреть картинку поле для ввода tkinter. Картинка про поле для ввода tkinter. Фото поле для ввода tkinter

Определение стороны label_e особой роли не играет, поскольку это последний виджет, который добавляется в контейнер.

Важно запомнить, что это основная причина, почему порядок так важен при работе с Pack. Чтобы не столкнутся с непредвиденными результатами в сложных макетах распространенной практикой считается их расположение в пределах фрейма так, что бы они не пересекались.

В таких случаях рекомендуется использовать geometry manager Grid, поскольку он позволяет прямо задавать положение каждого виджета с помощью вызова geometry manager и избегать использования дополнительных фреймов.

Geometry manager Grid

Grid — самый гибкий из всех доступных geometry manager. Он полностью переосмысливает концепцию сетки (grid), которая традиционно используется при дизайне пользовательских интерфейсов. Сетка — это двумерная таблица, разделенная на строки и колонки, где каждая ячейка представляет собой пространство, которое доступно для виджета.

Продемонстрируем работу Grid с помощью следующего макета:

поле для ввода tkinter. Смотреть фото поле для ввода tkinter. Смотреть картинку поле для ввода tkinter. Картинка про поле для ввода tkinter. Фото поле для ввода tkinter

Его можно представить в виде таблицы 3×3, где виджеты во второй и третьей колонках растягиваются на две строки, а виджет в третьей строке занимает все три колонки.

Как и в предыдущем варианте используем 5 меток с разным фоном, чтобы проиллюстрировать распределение ячеек:

Также будем передавать словарь параметров, включающий внутренний отступ, который растянет виджеты на все доступное пространство внутри ячеек.

Как работает Grid

Расположение label_a и label_b говорит само за себя: они занимают первую и вторую строки первой колонки соответственно (важно не забывать, что индексация начинается с нуля):

поле для ввода tkinter. Смотреть фото поле для ввода tkinter. Смотреть картинку поле для ввода tkinter. Картинка про поле для ввода tkinter. Фото поле для ввода tkinter

Важно запомнить, что в отличие от Pack есть возможность менять порядок вызовов к grid() для каждого виджета без изменения финального макета.

Например, sticky=tk.N выравнивает виджет у верхней границы ячейки (north – север), а sticky=tk.SE — в правом нижнем углу (south-ease – юго-восток).

Если параметру sticky значение не передается, виджет располагается по центру ячейки.

Geometry manager Place

Менеджер Place позволяет задать положение и размер виджета в абсолютном или относительном значении.

Из трех менеджеров этот является наименее используемым. С другой стороны, он может работать со сложными сценариями, где есть необходимость свободно разместить виджет или перекрыть другой.

Для демонстрации работы Place повторим следующий макет, смешав абсолютные и относительные положения и размеры:

поле для ввода tkinter. Смотреть фото поле для ввода tkinter. Смотреть картинку поле для ввода tkinter. Картинка про поле для ввода tkinter. Фото поле для ввода tkinter

Метки, которые будут отображаться, имеют разный фон и определены в том порядке, в котором они будут расположены слева направо и сверху вниз:

Если запустить эту программу, то можно будет увидеть наложение label_c и label_d в центре экрана. Этого не удастся добиться с помощью других менеджеров.

Как работает Place

Наконец, пятая метка использует абсолютное позиционирование и относительный размер. Как можно было заметить, эти размеры легко переключаются, поскольку значение размера родительского контейнера предполагается (200 х 200 пикселей). Однако при изменении размера основного окна будут работать только относительные величины. Это поведение легко проверить.

Еще одно важное преимущество Place — возможность совмещать его с Pack и Grid.

Например, представьте, что есть необходимость динамически отобразить текст на виджете при нажатии правой кнопкой мыши на нем. Его можно представить в виде виджета Label, который располагается в относительном положении при нажатии:

Лучше всего использовать другие менеджеры в своих приложениях Tkinter, а специализированные оставить для случаев, когда нужно кастомное позиционирование.

Группировка полей ввода с помощью виджета LabelFrame

поле для ввода tkinter. Смотреть фото поле для ввода tkinter. Смотреть картинку поле для ввода tkinter. Картинка про поле для ввода tkinter. Фото поле для ввода tkinter

Поскольку цель этого примера — показать финальный макет, добавим некоторые виджеты без сохранения их ссылок в виде атрибутов:

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *