Главная


24.8. Методы для виджетов Text

Эти методы доступны для всех текстовых виджетов:

.bbox(index)

Возвращает ограничивающую рамку для символа с заданным индексом, представляющую собой 4-кортеж (x, y, width, height). Если символ не виден, возвращается None. Обратите внимание, что этот метод может не вернуть точное значение, если вы не вызовете метод .update_idletasks() (см. Раздел 26, " Универсальные методы виджетов").

.compare(index1, op, index2)

Сравнивает позиции двух индексов в текстовом виджете и возвращает true, если между index1 и index2 выполняется соотношение op. Параметр op указывает, какое сравнение использовать, одно из: '<', '<=', '==', '!=', '>=', или '>'.

Например, для текстового виджета t, t.compare('2.0', '<=', END) возвращает истину, если начало второй строки находится перед или в конце текста в t.

.delete(index1, index2=None)

Удаляет текст, начинающийся сразу после index1. Если второй аргумент опущен, удаляется только один символ. Если указан второй индекс, удаление продолжается до символа после index2, но не включая его. Напомним, что индексы располагаются между символами.

.dlineinfo(index)

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

.edit_modified(arg=None)

Запрашивает, устанавливает или снимает флаг modified. Этот флаг используется для отслеживания того, было ли изменено содержимое виджета. Например, если вы реализуете текстовый редактор в виджете Text, вы можете использовать флаг modified, чтобы определить, изменилось ли его содержимое с момента последнего сохранения в файл.

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

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

.edit_redo()

Выполняет операцию повторного редактирования. Подробнее см. в Раздел 24.7, "Стек отмены/возврата виджета Text".

.edit_reset()

Очищает стек отмены.

.edit_separator()

Помещает разделитель в стек отмены. Этот разделитель ограничивает область действия будущей операции отмены только теми изменениями, которые были внесены с момента внесения разделителя. Подробнее см. в Раздел 24.7, "Стек отмены/возврата виджета Text".

.edit_undo()

Отменяет все изменения содержимого виджета, сделанные с тех пор, как последний разделитель был помещен в стек отмены, или до самого низа стека, если стек не содержит разделителей. Подробнее см. в Раздел 24.7, "Стек отмены/возврата виджета Text". Если стек отмены пуст, то это ошибка.

.image_create(index[, option=value, ...])

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

Опции для этого метода приведены в таблице ниже. Вы можете передать либо серию аргументов option=value, либо словарь имен и значений опций.

align Эта опция определяет, как изображение должно быть выровнено по вертикали, если его высота меньше высоты содержащей его строки. Значениями могут быть top для выравнивания по верхней части пространства; center для выравнивания по центру; bottom для размещения изображения внизу; или baseline для выравнивания нижней части изображения по базовой линии текста.
image Используемое изображение. См. Раздел 5.9, "Изображения".
name Вы можете присвоить имя данному экземпляру изображения. Если вы опустите этот параметр, Tkinter сгенерирует уникальное имя. Если вы создадите несколько экземпляров изображения в одном виджете Text, Tkinter сгенерирует уникальное имя, добавив к нему знак "#", за которым последует число.
padx Если задано, то эта опция представляет собой количество пикселей дополнительного пространства, которое будет добавлено с обеих сторон изображения.
pady Если задано, эта опция представляет собой количество пикселей дополнительного пространства, которое будет добавлено над и под изображением.

.get(index1, index2=None)

Используйте этот метод для получения текущего текста из виджета. Получение начинается с индекса index1. Если второй аргумент опущен, вы получаете символ после index1. Если вы укажете второй индекс, вы получите текст между этими двумя индексами. Встроенные изображения и окна (виджеты) игнорируются. Если диапазон включает несколько строк, они разделяются символами новой строки ('\n').

.image_cget(index, option)

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

.image_configure(index, option, ...)

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

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

.image_names()

Этот метод возвращает кортеж имен всех встроенных изображений текстового виджета.

.index(i)

Для индекса i этот метод возвращает эквивалентную позицию в формате 'line.char'.

.insert(index, text, tags=None)

Вставляет заданный text по заданному index.

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

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

.mark_gravity(mark, gravity=None)

Изменяет или запрашивает гравитацию существующей метки; объяснение гравитации см. в Раздел 24.2, "Метки виджета Text", выше.

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

.mark_names()

Возвращает последовательность имен всех меток в окне, включая tk.INSERT и tk.CURRENT.

.mark_next(index)

Возвращает имя метки, следующей за заданным index; если следующих меток нет, метод возвращает пустую строку.

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

.mark_previous(index)

Возвращает имя метки, предшествующей заданному index. Если предшествующих меток нет, метод возвращает пустую строку.

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

.mark_set(mark, index)

Если метка с именем mark не существует, то она создается с помощью гравитации tk.RIGHT и помещается туда, куда указывает index. Если метка уже существует, она перемещается в новое место.

Этот метод может изменить положение индексов tk.INSERT или tk.CURRENT.

.mark_unset(mark)

Удаляет именованную метку. Этот метод не может быть использован для удаления меток tk.INSERT или tk.CURRENT.

.scan_dragto(x, y)

Смотрите .scan_mark, ниже.

.scan_mark(x, y)

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

Чтобы реализовать эту функцию, привяжите событие нажатия кнопки мыши к обработчику, который вызывает .scan_mark(x, y), где x и y - текущее положение мыши. Затем привяжите событие <Motion> к обработчику, который вызывает .scan_dragto(x, y), где x и y - новое положение мыши.

.search(pattern, index, option, ...)

Ищет шаблон pattern (который может быть как строкой, так и регулярным выражением) в буфере, начиная с заданного индекса index. В случае успеха возвращается индекс в виде 'line.char', в случае неудачи - пустая строка.

Допустимыми опциями для этого метода являются:

backwards Установите этот параметр в True для поиска в обратном направлении от индекса. По умолчанию активирована опция forwards.
count Если вы установите этот параметр в управляющую переменную IntVar, то при совпадении вы сможете получить длину текста, который совпал, используя метод .get() для этой переменной после возврата метода.
exact Установите этот параметр в True для поиска текста, который точно соответствует pattern. Эта опция используется по умолчанию. Сравните с опцией regexp ниже.
forwards Установите этот параметр в значение True для поиска вперед от индекса. Эта опция используется по умолчанию.
regexp Установите этот параметр в значение True, чтобы интерпретировать pattern как регулярное выражение в стиле Tcl. По умолчанию используется поиск точного совпадения с pattern. Регулярные выражения Tcl являются подмножеством регулярных выражений Python и поддерживают следующие возможности:
. ^ [c1…] (…) * + ? e1|e2
nocase Установите этот параметр в 1, чтобы игнорировать регистр. По умолчанию используется поиск с учетом регистра.
stopindex Чтобы ограничить поиск, установите этот параметр на индекс, за пределы которого поиск не должен выходить.

.see(index)

Если текст, содержащий заданный индекс, не виден, прокрутите текст до тех пор, пока он не станет виден.

.tag_add(tagName, index1, index2=None)

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

.tag_bind(tagName, sequence, func, add=None)

Этот метод связывает событие со всем текстом, помеченным tagName. Дополнительные сведения о привязках событий см. в разделе 54, "События", ниже.

Чтобы создать новую привязку для текста с тегами, используйте первые три аргумента: sequence указывает на событие, а func - это функция, которую вы хотите вызвать при наступлении этого события.

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

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

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

.tag_cget(tagName, option)

Используйте этот метод для получения значения заданной опции option для заданного имени тега tagName.

.tag_config(tagName, option, ...)

Чтобы изменить значение опций для тега с именем tagName, передайте одну или несколько пар option=value.

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

Вот опции для настройки тега:

background Цвет фона для текста с этим тегом. Обратите внимание, что вы не можете использовать bg в качестве аббревиатуры.
bgstipple Чтобы фон казался сероватым, установите этот параметр в одно из стандартных имен битмапов (см. Раздел 5.7, "Битовые изображения"). Это не имеет никакого эффекта, если вы также не укажете background.
borderwidth Ширина границы вокруг текста с этим тегом. По умолчанию 0. Обратите внимание, что вы не можете использовать bd в качестве аббревиатуры.
fgstipple Чтобы текст выглядел сероватым, установите этот параметр как имя битмапа.
font Шрифт, используемый для отображения текста с этим тегом. См. Раздел 5.4, "Шрифты".
foreground Цвет, используемый для текста с этим тегом. Обратите внимание, что здесь нельзя использовать аббревиатуру fg.
justify Параметр justify, установленный для первого символа каждой строки, определяет, как эта строка будет выровнена: tk.LEFT (по умолчанию), tk.CENTER или tk.RIGHT.
lmargin1 На сколько отступать от первой строки фрагмента текста, содержащего этот тег. По умолчанию используется значение 0. Допустимые значения см. в Раздел 5.1, "Размеры".
lmargin2 На сколько отступать от последующих строк фрагмента текста, содержащего этот тег. По умолчанию 0.
offset На сколько поднимать (положительное значение) или опускать (отрицательное значение) текст с этим тегом относительно базовой линии. Используйте это, например, для получения надстрочных или подстрочных знаков. Допустимые значения см. в Раздел 5.1, "Размеры".
overstrike Установите overstrike=1, чтобы провести горизонтальную линию через центр текста с этим тегом.
relief Какой 3-D эффект использовать для текста с этим тегом. По умолчанию используется relief=tk.FLAT; другие возможные значения см. в Раздел 5.6, " Стили рельефа".
rmargin Размер правого поля для фрагментов текста с этим тегом. По умолчанию 0.
spacing1 Эта опция определяет, сколько дополнительного вертикального пространства будет помещено над каждой строкой текста с этим тегом. Если строка переносится, то это пространство добавляется только перед первой строкой, которую она занимает на экране. По умолчанию 0.
spacing2 Эта опция указывает, сколько дополнительного вертикального пространства добавлять между отображаемыми строками текста с этим тегом, когда строка переносится. По умолчанию 0.
spacing3 Эта опция определяет, сколько дополнительного вертикального пространства будет добавлено под каждой строкой текста с этим тегом. Если строка переносится, это пространство добавляется только после последней строки, которую она занимает на экране. По умолчанию 0.
tabs Как будут развернуты табуляции в строках с этим тегом. См. Раздел 24.6, "Установка табуляции в виджете Text".
underline Установите underline=1 для подчеркивания текста с помощью этого тега.
wrap Насколько длинные строки будут перенесены в тексте с этим тегом. См. описание опции wrap для текстовых виджетов выше.

.tag_delete(tagName, ...)

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

.tag_lower(tagName, belowThis=None)

Этот метод используется для изменения порядка тегов в стеке тегов (объяснение стека тегов см. в разделе 24.5, "Теги виджета Text", выше). Если вы передадите два аргумента, то тег с именем tagName будет перемещен на позицию чуть ниже тега с именем belowThis. Если вы передадите только один аргумент, то тег будет перемещен в нижнюю часть стека тегов.

.tag_names(index=None)

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

.tag_nextrange(tagName, index1, index2=None)

Этот метод ищет места в заданной области, где начинается тег с именем tagName. Искомая область начинается с индекса index1 и заканчивается индексом index2. Если аргумент index2 опущен, поиск ведется до конца текста.

Если в заданной области с тегом есть место, где он начинается, то метод возвращает последовательность [i0, i1], где i0 - индекс первого помеченного символа, а i1 - индекс позиции сразу после последнего помеченного символа.

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

.tag_prevrange(tagName, index1, index2=None)

Этот метод ищет места в заданной области, где начинается тег с именем tagName. Область поиска начинается перед индексом index1 и заканчивается индексом index2. Если аргумент index2 опущен, поиск ведется до конца текста.

Возвращаемые значения такие же, как в .tag_nextrange().

.tag_raise(tagName, aboveThis=None)

Используйте этот метод, чтобы изменить порядок тегов в стеке тегов (объяснение стека тегов см. выше, в Раздел 24.5, "Теги виджета Text"). Если вы передадите два аргумента, то тег с именем tagName будет перемещен на позицию чуть выше тега с именем aboveThis. Если вы передаете только один аргумент, то этот тег перемещается на вершину стека тегов.

.tag_ranges(tagName)

Этот метод находит все диапазоны текста в виджете, которые помечены именем tagName, и возвращает последовательность [s0, e0, s1, e1, ...], где каждый SI - это индекс непосредственно перед первым символом диапазона, а ei - индекс непосредственно после последнего символа диапазона.

.tag_remove(tagName, index1, index2=None)

Удаляет тег с именем tagName со всех символов между index1 и index2. Если index2 опущен, то тег удаляется с единственного символа после index1.

.tag_unbind(tagName, sequence, funcid=None)

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

.window_cget(index, option)

Возвращает значение заданной опции для встроенного виджета по указанному index.

.window_configure(index, option)

Чтобы изменить значение опций для встроенного виджета в заданном index, передайте одну или несколько пар option=value.

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

.window_create(index, option, ...)

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

  1. Вы можете передать виджет в опцию window в этом методе, или
  1. Можно определить процедуру, которая будет создавать виджет, и передать ее в качестве обратного вызова опции create.

Опциями для .window_create() являются:

align Определяет, как расположить встроенный виджет по вертикали в строке, если он не такой высокий, как текст в строке. Значения включают: align=tk.CENTER (по умолчанию), который центрирует виджет по вертикали в строке; align=tk.TOP, который размещает верх изображения в верхней части строки; align=tk.BOTTOM, который размещает низ изображения в нижней части строки; и align=tk.BASELINE, который выравнивает низ изображения по базовой линии текста.
create Процедура, создающая встроенный виджет по требованию. Эта процедура не принимает аргументов, должна создавать виджет как дочерний виджет текстового виджета и возвращать виджет в качестве результата.
padx Дополнительное пространство, добавляемое слева и справа от виджета в пределах текстовой строки. По умолчанию 0.
pady Дополнительное пространство, добавляемое над и под виджетом в текстовой строке. По умолчанию 0.
stretch Эта опция управляет тем, что происходит, когда строка выше, чем встроенный виджет. Обычно эта опция имеет значение 0, что означает, что встроенный виджет будет иметь естественный размер. Если вы установите stretch=1, виджет будет растянут по вертикали, чтобы заполнить высоту строки, а опция align будет проигнорирована.
window Виджет для вставки. Этот виджет должен быть дочерним по отношению к виджету текста.

.window_names()

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

.xview(tk.MOVETO, fraction)

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

Этот метод может быть вызван двумя разными способами. Первый вызов позиционирует текст на значение, заданное fraction, где 0.0 перемещает текст в крайнее левое положение, а 1.0 - в крайнее правое.

.xview(tk.SCROLL, n, what)

Второй вызов перемещает текст влево или вправо: аргумент what указывает, на сколько перемещать, и может быть либо tk.UNITS, либо tk.PAGES, а n указывает, на сколько символов или страниц перемещать текст вправо относительно его отображения (или влево, если отрицательно).

.xview_moveto(fraction)

Этот метод прокручивает текст так же, как и .xview(tk.MOVETO, fraction).

.xview_scroll(n, what)

Аналогично .xview(tk.SCROLL, n, what).

.yview(tk.MOVETO, fraction)

Эквивалент вертикальной прокрутки .xview(tk.MOVETO,...).

.yview(tk.SCROLL, n, what)

Эквивалент вертикальной прокрутки .xview(tk.SCROLL,...). При вертикальной прокрутке по tk.UNITS единицами измерения являются строки.

.yview_moveto(fraction)

Эквивалент вертикальной прокрутки .xview_moveto().

.yview_scroll(n, what)

Эквивалент вертикальной прокрутки функции .xview_scroll().


>> Toplevel: Методы окна верхнего уровня