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

text_00

Виджет Тext предоставляет расширенные возможности, которые позволяют редактировать многострочный текст и форматировать способ его отображения, например изменять его цвет и шрифт.

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

text_area = Text(master, options)
1

где master - ссылка на родительское окно, а options - набор следующих параметров:

  • bg: цвет фона по умолчанию для текстового виджета.
  • bd: ширина границы вокруг текстового виджета. По умолчанию 2 пикселя.
  • font: шрифт по умолчанию для текста, вставляемого в виджет.
  • fg: цвет, используемый для текста (и растровых изображений) в виджете. Вы можете изменить цвет для помеченных регионов; эта опция только по умолчанию.
  • height: высота виджета в строках (не в пикселях!), измеренная в соответствии с текущим размером шрифта.
  • padx: размер внутреннего отступа, добавляемый слева и справа от текстовой области. По умолчанию используется один пиксель.
  • pady: размер внутреннего отступа, добавляемый над и под текстовой областью. По умолчанию используется один пиксель.
  • selectbackground: цвет фона для отображения выбранного текста.
  • selectborderwidth: ширина границы для использования вокруг выделенного текста.
  • spacing1: эта опция указывает, сколько дополнительного вертикального пространства помещается над каждой строкой текста. Если строка переносится, это пространство добавляется только перед первой строкой, которую она занимает на дисплее. По умолчанию 0.
  • spacing2: этот параметр указывает, сколько дополнительного вертикального пространства необходимо добавить между отображаемыми строками текста при переносе логической строки. По умолчанию 0.
  • spacing3: эта опция указывает, сколько дополнительного вертикального пространства добавляется ниже каждой строки текста. Если строка переносится, это пространство добавляется только после последней строки, которую оно занимает на дисплее. По умолчанию 0.
  • state: обычно текстовые виджеты реагируют на события клавиатуры и мыши; установить state=NORMAL, чтобы получить это поведение. Если вы установите state=DISABLED, текстовый виджет не будет отвечать, и вы не сможете изменять его содержимое программным способом.
  • width: ширина виджета в символах (не в пикселях!), измеренная в соответствии с текущим размером шрифта.
  • wrap: эта опция управляет отображением слишком широких линий. Установите wrap=WORD, и он будет разбивать строку после последнего слова, которое будет соответствовать. При поведении по умолчанию, wrap=CHAR, любая слишком длинная строка будет разбита на любой символ.
  • xscrollcommand: чтобы сделать текстовый виджет горизонтально прокручиваемым, установите этот параметр для метода set() горизонтальной полосы прокрутки.
  • yscrollcommand: чтобы сделать текстовый виджет вертикально прокручиваемым, установите этот параметр для метода set() вертикальной полосы прокрутки.

Методы

Text имеет следующие методы:

  • delete(startindex [,endindex]) - метод удаляет определенный символ или диапазон текста.
  • get(startindex [,endindex]) - метод возвращает определенный символ или диапазон текста.
  • index(index) - возвращает абсолютное значение индекса на основе данного индекса.
  • insert(index [,string]...) - метод вставляет строки в указанное местоположение индекса.
  • selection_get() - метод возвращает выделенный текст.

ПРИМЕЧАНИЕ

Индексы можно указывать ключевыми словами:

  • SEL_FIRST, SEL_LAST - при выделении текста указывает на начало и конец позиций выделенного фрагмента.
  • INSERT - место расположение курсора
  • END- конец текста
  • указывая число: 1.0, где 1 - указания номера стоки, а 0 - указание номера символа в строке.

Пример Text:

from tkinter import *

root = Tk()
text = Text(root)
text.insert(INSERT, "Hello.....")
text.insert(END, "Bye Bye.....")
text.pack()
root.mainloop()
1
2
3
4
5
6
7
8

Результат:

text

Упражнения

  1. Напишите программу с текстовым полем растягивающимся на всё окно. Проверьте правильность работы растяжения изменяя размер окна.

  2. Напишите программу с текстовым полем и кнопкой Add. При нажатии на кнопку происходит добавление текста в текстовое поле: "This is a new text!"

    text_add

  3. Напишите программу с текстовым полем и кнопками:

    • Copy all - при нажатии на которую, происходит копирование всего текста,
    • Paste - при нажатии на которую, происходит добавление скопированного текста.

    text_copy_all_paste

  4. Напишите программу с текстовым полем и кнопками:

    • Copy all - при нажатии на которую, происходит копирование всего текста,
    • Copy - при нажатии на которую, происходит копирование выделенного текста,
    • Paste - при нажатии на которую, происходит добавление скопированного текста в место расположения курсора.

    text_copy_all_copy_paste

  5. Напишите программу с текстовым полем и кнопками Copy, Cut и Paste:

    • Copy - при нажатии, происходит копирование выделенного текста;
    • Cut - при нажатии, происходит вырезание выделенного текста в буфер;
    • Paste - при нажатии, происходит добавление скопированного текста в место расположения курсора.

    text_copy_cut_paste

  6. Напишите программу с текстовым полем и кнопками "Capitalize","Lower", "Upper" и "Title". Нажатие кнопок форматирует выделенный пользователем текст:

    • нажатие "Capitalize": в выделенном тексте первая буква становиться заглавная, остальные маленькие;
    • нажатие "Lower": в выделенном тексте все буквы становятся строчными (маленькими);
    • нажатие "Upper": в выделенном тексте все буквы становятся заглавными (большими);
    • нажатие "Title": в выделенном тексте первая буква каждого слова становится заглавная.

    text_capitalize_lower_upper_title

  7. Напишите программу с текстовым полем, кнопкой "Get status" и строкой состояния, виджеты должны масштабироваться под размер окна. Обновления статуса происходит при нажатии кнопки. В стоке состояния вывести информацию:

    • общее количество символов (функция len() - возвращает длину строки),
    • общее количество строк,
    • номер строки, в которой находиться курсор,
    • номер символа в строке, в которой находиться курсор.

    Пример строки состояния можно подсмотреть в текстовом редакторе, например "Блокнот":

    text_status

  8. Напишите программу с текстовым полем и кнопкой <- BackSpace. При нажатии на кнопку будет удаляться последний напечатанный символ, с учетом места расположения курсора.