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

Виджеты Button, Label, Entry

В Tkinter существует три способа конфигурирования свойств виджетов:

Button – кнопка

По умолчанию размер кнопки соответствует ширине и высоте текста, однако с помощью свойств width и height эти параметры можно изменить. Единицами измерения в данном случае являются знакоместа.

Label – метка

На примере объекта типа Label рассмотрим свойство font – шрифт.

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

Также как font свойство bd есть не только у метки. С его помощью регулируется размер границ (единица измерения – пиксель):

Бывает, что метки и кнопки не присваивают переменным, если потом к ним в коде не приходится обращаться. Их создают от класса и сразу размещают:

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

Entry – однострочное текстовое поле

Метод insert принимает позицию, в которую надо вставлять текст, и сам текст.

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

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

Напишите программу, состоящую из семи кнопок, цвета которых соответствуют цветам радуги. При нажатии на ту или иную кнопку в текстовое поле должен вставляться код цвета, а в метку – название цвета.

Коды цветов в шестнадцатеричной кодировке: #ff0000 – красный, #ff7d00 – оранжевый, #ffff00 – желтый, #00ff00 – зеленый, #007dff – голубой, #0000ff – синий, #7d00ff – фиолетовый.

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

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

Источник

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

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

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

Text и Scrollbar

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

Методы Text

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

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

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

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

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

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

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

Источник

Создание, изменение и проверка текста / tkinter 2

Создание текстовых элементов

Виджет Entry представляет собой текстовый элемент на одной строке. Вместе с классами Label и Button он является одним из самых используемых в Tkinter.

Как создать текстовый элемент

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

Как работают экземпляры

Экземпляры виджетов Entry создаются в родительском окне или фрейме, будучи переданными в качестве первого аргумента. С помощью опциональных ключевых слов можно задать дополнительные свойства. У username в этом примере таких нет, а у password — аргумент show со строкой «*», который будет выводить каждый символ как звездочку.

Метод delete() принимает два аргумента, которые представляют собой диапазон символов для удаления. Важно только помнить, что индексы начинаются с 0 и не включают последний символ. Если передать только один аргумент, то удалится символ на этой позиции.

Стандартный шаблон сброса содержимого на значение по умолчанию — комбинация методов delete() и insert() :

Еще один паттерн — добавление текста туда, где находится курсор. Для этого используется константа INSERT :

Как и Button класс Entry также принимает параметры relief и state для изменения стиля контура и состояния. Также стоит отметить, что вызовы delete() и insert() игнорируются, когда состояние равно «disabled» или «readonly».

Отслеживание изменений текста

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

Как отслеживать изменения текста

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

Как работает изменение текста

Первые строки конструктора приложения создают экземпляр StringVar и прикрепляют функцию обратного вызова для режима записи. Валидные значения этого режима:

При вызове функция обратного вызова получает три аргумента: внутреннее имя переменной, пустую строку (она используется в других типах переменных Tk ) и режим, который запустил операцию. При объявлении его с *args эти аргументы становятся опциональными, потому что при обратном вызове значения уже не используются.

Валидация текста в полях

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

При определенных условиях нужно предотвратить возможность ввода невалидного содержимого в поле текста. Следующие примеры рассмотрят, как реализовать такое поведение с помощью параметров валидации в виджете Entry.

Как валидировать текст

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

Если запустить этот скрипт и ввести не букву алфавита или цифру, то содержимое не изменится, а вместо этого будет выведено сообщение об ошибке в консоль. Это же будет происходить, если попытаться ввести больше 10 символов, поскольку регулярное выражение ограничивает общее количество.

Как работает валидация текста

vcmd = (self.register(self.validate_username), «%i», «%P»)

Можно использовать следующие замещения:

Источник

Программирование GUI на Python с помощью Tkinter. Tkinter Text

Tkinter — графическая библиотека для Python, которая используется для разработки графического интерфейса на Python (начиная с Python 3.0, Tkinter переименована в tkinter). Tkinter является интерфейсом к tcl/tk и расшифровывается как Tk interface. Эта библиотека кроссплатформенна и может применяться в многих распространённых ОС: Linux, Mac OS X, Windows. Кроме того, Tkinter включена в стандартный дистрибутив Python.

Так как библиотека Tkinter — это достаточно прозрачный интерфейс к tcl/tk, то основной источник информации для неё — man-страницы tcl/tk. Данные страницы есть в любой Unix-системе и доступны онлайн.

Импорт

Импортируется Tkinter точно так же, как и любая другая библиотека на Python:

В Tkinter визуальные контроллы называют виджетами (widget — стандартизированный компонент графического интерфейса, с которым пользователь осуществляет взаимодействие).

Text в Tkinter

Text представляет собой виджет, позволяющий пользователю вводить любое количество текста. Text имеет дополнительное свойство wrap, которое отвечает за перенос (чтобы переносить по словам, используют значение WORD).

В нашем случае методы insert, get и delete выполняют добавление, извлечение и удаление текcта. Первый аргумент является местом вставки в виде ‘x.y’, где x является строкой, а y – столбцом.

Таким образом, с помощью Text в Tkinter мы можем запрограммировать многострочное текстовое поле. К слову, такой виджет нередко используется при заполнении web-форм. По умолчанию его размер составляет 80 знакомест по горизонтали и 24 по вертикали.

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

Но данные свойства мы можем поменять, используя опции width и height. Также можно конфигурировать шрифт, цвет и пр.

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

Text и Scrollbar

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

В Tkinter скроллеры производятся с помощью класса Scrollbar. В этом случае объект-скроллер связывается с виджетом, которому он нужен. И речь сейчас идёт не обязательно о многострочном текстовом поле. Нередко полосы прокрутки используются и в списках.

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

Методы Text

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

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

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

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

tkinter многострочное текстовое поле. Смотреть фото tkinter многострочное текстовое поле. Смотреть картинку tkinter многострочное текстовое поле. Картинка про tkinter многострочное текстовое поле. Фото tkinter многострочное текстовое полеРазместив метку в функции, мы сможем каждый раз при вызове функции создавать новую метку. В обратном случае, если бы метка находилась в основной ветке нашей программы, предыдущая бы исчезала.

Подробнее о Tkinter и программировании GUI на Python читайте в официальной документации или на обучающих сайтах. Также мы рекомендуем пройти углубленный курс Python-разработки от опытных IT-специалистов:

Источник

Как написать игру на Python3

Самоучитель Python3 для начинающих

#4 Создание GUI с помощью tkinter.

Многострочное текстовое поле ввода.

В предыдущей главе мы рассмотрели, как использовать однострочное текстовое поле Entry. Его использование оправдано при необходимости ввода небольшого количества информации. Например: поле ввода ответа в чате или строка поиска. А как быть, если требуется многострочное текстовое поле? Например, для создания блокнота? Для этого используется виджет tkinter – Text.

Внимание! Информация в этой главе предполагает, что вы внимательно ознакомились с предыдущими тремя главами раздела «Создание GUI с помощью tkinter» и можете создавать главное окно, упаковывать виджеты и т.д. эти моменты более рассматриваться не будут!

Создайте файл test.py и наберите в нем следующий код:

Большая часть кода должны быть вам уже знакома: мы импортируем модуль tkinter, указываем размеры и заголовок окна root, и запускаем цикл mainloop() после упаковки всех виджетов. Запустите программу. У вас должно получиться что-то похожее на Рис 1.

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

Рис 1. Вид окна root с виджетом Text.

Единственная новая команда в этой программе находиться в строке 7. Здесь мы создаем виджет многострочного текстового поля, длиной 20 символов и высотой в 10 символов. Все именно так: длина и высота этого поля измеряется исключительно в знакоместах, а не пикселях. Упаковывается он при помощи любого упаковщика. В нашем случае, упаковщик pack() выбран исключительно из-за удобства использования.

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

Размер виджета.

Как уже было сказано, одним из способов регулирования размеров виджета Text, является прямое указание максимального количества символов (включая пробелы) в строке (параметр width) и количество этих строк (параметр height). Измените строку 7 следующим образом:

Перезапустите программу. Результат выполнения программы, после внесения изменений представлен на Рис2.

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

Рис 2. Вид виджета Text после изменений.

Как вы можете видеть, размеры поля ввода существенно увеличились. Если указать слишком большое количество символов, то виджет просто «выйдет» за рамки окна root, и потребуется изменить его размеры мышью, чтобы виджет стал полностью виден. Однако, существует и другой способ изменения размера текстового поля. Вернем строку 7 в исходный вид и добавим параметр font. С его помощью можно указать шрифт и его размер, который будет использоваться в виджете.

Снова измените строку 7 следующим образом:

Сохраните изменения и запустите программу. Попробуйте набрать какой-нибудь текст. Вы должны заметить, что символы стали больше, а само окно виджета растянулось, хотя в нем, так же как при первом запуске, 20 символов в строке и 10 строк в высоту. Общий вид после внесения изменений должен быть схож с тем, что представлен на Рис 3.

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

Рис 3. Результат изменения размера шрифта в виджете.

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

Для виджета Text, так же как и для большинства других виджетов, можно применить параметры рельефа. Опять измените строку 7, присвоив виджету параметр relief.

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

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

Рис 4. Вид виджета Text с параметром relief.

Все возможные значения параметра relief были рассмотрены в статье «#2. Создание GUI с помощью tkinter.». Попробуйте использовать разные значения relief и посмотрите, как будет меняться внешний вид виджета Text.

Еще одним способом изменения внешнего вида виджета Text в tkinter, является указание толщины его границы. Значение этого параметра указывается в пикселях. Измените строку 7 следующим образом:

Снова запустите программу. Окно должно принять следующий вид:

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

Рис 5. Рамка вокруг виджета Text в tkinter.

Рамку, которую мы указали с помощью параметра bd просто нельзя не заметить. Разумеется, в столь большом размере рамку не необходимости – подбирайте её толщину по своему усмотрению.

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

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

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

Рис 6. Перенос текста в виджете Text по умолчанию.

Разумеется, это неправильно. Чтобы указать tkinter, что в виджете Text нужно переносить слова целиком, следует использовать параметр wrap, со значением WORD:

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

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

Рис 7. Перенос слов в виджете Text с параметром wrap = tkinter.WORD.

Другими возможными значениями wrap являются CHAR (по умолчанию) и NONE. В случае, если указан параметр NONE, печать в одну строку будет продолжаться до тех пор, пока пользователь не нажмет клавишу «Enter» и не переведет каретку на новую строку.

Вставка значений в виджет Text.

Для вставки значений в виджет Text, используется метод insert().

Как вы можете видеть, в строке 4 мы подготовили строку, а инструкцией в строке 15 вывели её в виджет с координатами 1 строка, 0 знакоместо. Если в то же знакоместо вывести еще одну строку, то она просто отодвинет уже существующую, а не перенесет её на новую строку. А если вставить новую строку не по координатам 1.0 а, например, 1.2, то новая строка «раздвинет» уже существующую:

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

Для получения данных из виджета Text служит метод get(), который, в этом случае, имеет два параметра. Первый указывает знакоместо, откуда начнется считывание текстовых данных, а второй, где считывание закончится. Если необходимо прочитать весь текст, а количество символов заранее не известно, то следует использовать конструкцию следующего типа:

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

Для очистки виджета используется метод delete(), который имеет те же параметры что и метод get() – указываем откуда удалять и до каких пор. Если нужно удалить все значение из виджета Text, то в качестве первого места удаления следует указать первое знакоместо в первой строке, а вторым параметром END:

Эта инструкция полностью очистит виджет my_text.

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

В следующей статье мы используем полученные знания для создания онлайн-переводчика Yandex с графическим интерфейсом.

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

Рис 8. Внешний вид онлайн-переводчика Yandex на tkinter.

Источник

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

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