Главная


8.6. Методы виджетов Canvas

Все объекты Canvas поддерживают следующие методы:

.addtag_above(newTag, tagOrId)

Прикрепляет новый тег к объекту, находящемуся прямо над тем, который указан в tagOrId в списке отображения. Аргумент newTag - это тег, который вы хотите прикрепить, в виде строки.

.addtag_all(newTag)

Прикрепляет указанный тег newTag ко всем объектам на холсте.

.addtag_below(newTag, tagOrID)

Прикрепляет новый тег к объекту, находящемуся прямо под тем, который указан в tagOrId в списке отображения. Аргумент newTag - это строка тега.

.addtag_closest(newTag, x, y, halo=None, start=None)

Добавляет тег к объекту, ближайшему к экранным координатам (x, y). Если есть два или более объекта на одинаковом расстоянии, выбирается тот, который выше в списке отображения.

Используйте аргумент halo, чтобы увеличить эффективный размер точки. Например, значение 5 будет рассматривать любой объект в пределах 5 пикселей от (x, y) как перекрывающийся.

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

.addtag_enclosed(newTag, x1, y1, x2, y2)

Добавляет тег newTag ко всем объектам, которые находятся полностью внутри прямоугольника, верхний левый угол которого - (x1, y1), а нижний правый угол - (x2, y2).

.addtag_overlapping(newTag, x1, y1, x2, y2)

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

.addtag_withtag(newTag, tagOrId)

Добавляет тег newTag к объекту или объектам, указанным в tagOrId.

.bbox(tagOrId=None)

Возвращает кортеж (x1, y1, x2, y2), описывающий прямоугольник, содержащий все объекты, указанные в tagOrId. Если аргумент опущен, возвращает прямоугольник, содержащий все объекты на холсте. Верхний левый угол прямоугольника - (x1, y1), а нижний правый угол - (x2, y2).

.canvasx(screenx, gridspacing=None)

Преобразует координату x окна screenx в координату холста. Если задан gridspacing, координата холста округляется до ближайшего кратного этому значению.

.canvasy(screeny, gridspacing=None)

Преобразует координату y окна screeny в координату холста. Если задан gridspacing, координата холста округляется до ближайшего кратного этому значению.

.coords(tagOrId, x0, y0, x1, y1, ..., xn, yn)

Если передать только аргумент tagOrId, возвращает кортеж координат самого нижнего или единственного объекта, указанного этим аргументом. Количество координат зависит от типа объекта. В большинстве случаев это будет 4-кортеж (x1, y1, x2, y2), описывающий ограничивающий прямоугольник объекта.

Вы можете перемещать объект, передавая новые координаты.

.dchars(tagOrId, first=0, last=first)

Удаляет символы из текстового элемента или элементов. Символы между first и last включительно удаляются, где эти значения могут быть целочисленными индексами или строкой 'end', обозначающей конец текста. Например, для холста C и элемента I, C.dchars(I, 1, 1) удалит второй символ.

.delete(tagOrId)

Удаляет выбранный объект или объекты, указанные в tagOrId. Если ни один объект не соответствует tagOrId, это не считается ошибкой.

.dtag(tagOrId, tagToDelete)

Удаляет тег, указанный в tagToDelete, из объекта или объектов, указанных в tagOrId.

.find_above(tagOrId)

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

.find_all()

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

.find_below(tagOrId)

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

.find_closest(x, y, halo=None, start=None)

Возвращает одноэлементный кортеж, содержащий идентификатор объекта объекта, ближайшего к точке (x, y). Если подходящих объектов нет, возвращает пустой кортеж.

Используйте аргумент halo, чтобы увеличить эффективный размер точки. Например, halo=5 будет рассматривать любой объект в пределах 5 пикселей от (x, y) как перекрывающийся.

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

.find_enclosed(x1, y1, x2, y2)

Возвращает список идентификаторов объектов всех объектов, находящихся полностью внутри прямоугольника, верхний левый угол которого - (x1, y1), а нижний правый угол - (x2, y2).

.find_overlapping(x1, y1, x2, y2)

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

.find_withtag(tagOrId)

Возвращает список идентификаторов объектов объекта или объектов, указанных в tagOrId.

.focus(tagOrId=None)

Перемещает фокус на объект, указанный в tagOrId. Если таких объектов несколько, фокус перемещается на первый в списке отображения, который позволяет вставить курсор. Если нет соответствующих объектов или холст не имеет фокуса, фокус не перемещается.

Если аргумент опущен, возвращает идентификатор объекта, который имеет фокус, или '', если ни один из них не имеет фокуса.

.gettags(tagOrId)

Если tagOrId - это идентификатор объекта, возвращает список всех тегов, связанных с этим объектом. Если аргумент - это тег, возвращает все теги для самого нижнего объекта с этим тегом.

.icursor(tagOrId, index)

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

.index(tagOrId, specifier)

Возвращает целочисленный индекс данного спецификатора specifier в текстовом элементе, указанном в tagOrId (самый нижний, если tagOrId указывает на несколько объектов). Возвращаемое значение - соответствующая позиция в виде целого числа в соответствии с обычным соглашением Python, где 0 - позиция перед первым символом.

Аргумент specifier может быть любым из:

.insert(tagOrId, specifier, text)

Вставляет заданную строку в объект или объекты, указанные в tagOrId, в позицию, заданную аргументом specifier.

Значения specifier могут быть:

.itemcget(tagOrId, option)

Возвращает значение данного параметра конфигурации option в выбранном объекте (или самом нижнем объекте, если tagOrId указывает на несколько). Это аналогично методу .cget() для объектов Tkinter.

.itemconfigure(tagOrId, option, ...)

Если не заданы аргументы option, возвращает словарь, ключи которого - опции объекта, указанного в tagOrId (самый нижний, если tagOrId указывает на несколько объектов).

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

.move(tagOrId, xAmount, yAmount)

Перемещает объекты, указанные в tagOrId, добавляя xAmount к их X-координатам и yAmount к их Y-координатам.

.postscript(option, ...)

Генерирует инкапсулированное PostScript-представление текущего содержимого холста. Опции включают:

colormode Используйте 'color' для цветного вывода, 'gray' для оттенков серого или 'mono' для черно-белого.
file Если указан, указывает имя файла, куда будет записан PostScript. Если этой опции нет, PostScript возвращается в виде строки.
height Сколько высоты Y холста печатать. По умолчанию - вся видимая высота холста.
rotate Если false, страница будет отображаться в портретной ориентации; если true, в альбомной.
x Левая координата холста области для печати.
y Верхняя координата холста области для печати.
width Сколько ширины X холста печатать. По умолчанию - видимая ширина холста.

.scale(tagOrId, xOffset, yOffset, xScale, yScale)

Масштабирует все объекты в зависимости от их расстояния от точки P=(xOffset, yOffset). Масштабные коэффициенты xScale и yScale основаны на значении 1.0, что означает отсутствие масштабирования. Каждая точка в объектах, выбранных по tagOrId, перемещается так, чтобы ее расстояние по X от P умножалось на xScale, а по Y умножалось на yScale.

Этот метод не изменит размер текстового элемента, но может переместить его.

.scan_dragto(x, y, gain\=10.0)

См. метод .scan_mark() ниже.

.scan_mark(x, y)

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

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

Аргумент gain контролирует скорость сканирования. Этот аргумент имеет значение по умолчанию 10.0. Используйте большие числа для более быстрого сканирования.

.select_adjust(oid, specifier)

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

Текущая якорная позиция выбора также устанавливается в указанную позицию. Для обсуждения якорной позиции выбора см. метод select_from холста ниже.

Для значений specifier см. метод insert холста выше.

.select_clear()

Удаляет текущее выделение текста, если оно установлено. Если текущего выделения нет, метод ничего не делает.

.select_from(oid, specifier)

Этот метод устанавливает якорную позицию выбора в позицию, заданную аргументом specifier, в текстовом элементе с идентификатором объекта oid.

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

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

.select_item()

Если на этом холсте есть текущее выделение текста, возвращает идентификатор объекта текстового элемента, содержащего выбор. Если текущего выделения нет, этот метод возвращает None.

.select_to(oid, specifier)

Этот метод изменяет текущее выделение текста так, чтобы оно включало якорную позицию и позицию, заданную specifier, в текстовом элементе с идентификатором объекта oid. Для значений specifier см. метод insert холста выше.

.tag_bind(tagOrId, sequence=None, function=None, add=None)

Привязывает события к объектам на холсте. Для выбранного или выбранных объектов по tagOrId ассоциирует обработчик function с событием sequence. Если аргумент add является строкой, начинающейся с '+', новое привязывание добавляется к существующим привязкам для заданной sequence, в противном случае новая привязка заменяет привязку для заданной sequence.

Для общей информации о привязках событий см. Раздел 54, “События”.

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

.tag_lower(tagOrId, belowThis)

Перемещает объект или объекты, выбранные по tagOrId, в пределах списка отображения на позицию, непосредственно ниже первого или единственного объекта, указанного тегом или идентификатором belowThis.

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

Этот метод не влияет на элементы окна холста. Чтобы изменить порядок слоя элемента окна, используйте метод lower или lift на окне.

.tag_raise(tagOrId, aboveThis)

Перемещает объект или объекты, выбранные по tagOrId, в пределах списка отображения на позицию, непосредственно выше первого или единственного объекта, указанного тегом или идентификатором aboveThis.

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

Этот метод не влияет на элементы окна холста. Чтобы изменить порядок слоя элемента окна, используйте метод lower или lift на окне.

.tag_unbind(tagOrId, sequence, funcId=None)

Удаляет привязки для обработчика funcId и события sequence из объекта или объектов холста, указанных по tagOrId. См. Раздел 54, “События”.

.type(tagOrId)

Возвращает тип первого или единственного объекта, указанного по tagOrId. Возвращаемое значение будет одним из строковых значений 'arc', 'bitmap', 'image', 'line', 'oval', 'polygon', 'rectangle', 'text' или 'window'.

.xview(tk.MOVETO, fraction)

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

.xview(tk.SCROLL, n, what)

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

Размер перемещения для tk.UNITS определяется значением опции xscrollincrement холста; см. Раздел 22, “Виджет Scrollbar”.

Для перемещений по 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,…).

.yview_moveto(fraction)

Вертикальный эквивалент прокрутки .xview().

.yview_scroll(n, what)

Вертикальный эквивалент прокрутки .xview(), .xview_moveto() и .xview_scroll().


>> Объекты дуг на холсте