Разное

C canvas: Canvas. Урок 9 курса «Tkinter. Программирование GUI на Python»

05.06.2023

Canvas. Урок 9 курса «Tkinter. Программирование GUI на Python»

В tkinter от класса Canvas создаются объекты-холсты, на которых можно «рисовать», размещая различные фигуры и объекты. Делается это с помощью вызовов соответствующих методов.

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

В программе ниже создается холст. На нем с помощью метода create_line рисуются отрезки. Сначала указываются координаты начала (x1, y1), затем – конца (x2, y2).

from tkinter import *
root = Tk()
 
c = Canvas(root, width=200, height=200, bg='white')
c.pack()
 
c.create_line(10, 10, 190, 50)
 
c.create_line(100, 180, 100, 60, fill='green',
                width=5, arrow=LAST, dash=(10,2),
                activefill='lightgreen',
                arrowshape="10 20 10")
 
root.
mainloop()

Остальные свойства являются необязательными. Так activefill определяет цвет отрезка при наведении на него курсора мыши.

Создание прямоугольников методом create_rectangle:

… 
c.create_rectangle(10, 10, 190, 60)
 
c.create_rectangle(60, 80, 140, 190,
                   fill='yellow',
                   outline='green',
                   width=3,
                   activedash=(5, 4))
… 

Первые координаты – верхний левый угол, вторые – правый нижний. В приведенном примере, когда на второй прямоугольник попадает курсор мыши, его рамка становится пунктирной, что определяется свойством activedash

.

Методом create_polygon рисуется произвольный многоугольник путем задания координат каждой его точки:

… 
c.create_polygon(100, 10, 20, 90, 180, 90)
 
c.create_polygon(40, 110, 160, 110,
                 190, 180, 10, 180,
                 fill='orange', outline='black')
… 

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

…
c. create_polygon((40, 110), (160, 110), 
                 (190, 180), (10, 180),
                 fill='orange', outline='black')
… 

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

…
c.create_oval(50, 10, 150, 110, width=2)
c.create_oval(10, 120, 190, 190, 
              fill='grey70', outline='white')
… 

Более сложные для понимания фигуры получаются при использовании метода create_arc. В зависимости от значения опции style можно получить сектор (по умолчанию), сегмент (CHORD) или дугу (ARC). Также как в случае create_oval координаты задают прямоугольник, в который вписана окружность (или эллипс), из которой «вырезают» сектор, сегмент или дугу. Опции start

присваивается градус начала фигуры, extent определяет угол поворота.

… 
c.create_oval(10, 10, 190, 190,
              fill='lightgrey',
              outline='white')
c.create_arc(10, 10, 190, 190, 
             start=0, extent=45, 
             fill='red')
c.create_arc(10, 10, 190, 190, 
             start=180, extent=25, 
             fill='orange')
c.create_arc(10, 10, 190, 190, 
             start=240, extent=100, 
             style=CHORD, fill='green')
c.create_arc(10, 10, 190, 190, 
             start=160, extent=-70, 
             style=ARC, outline='darkblue', 
             width=5)
… 

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

На холсте можно разместить текст. Делается это с помощью метода create_text:

… 
c.create_text(100, 100, 
              text="Hello World,\nPython\nand Tk",
              justify=CENTER, font="Verdana 14")
c.create_text(200, 200, text="About this",
              anchor=SE, fill="grey")
… 

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

(от англ. west – запад). Другие значения: N, NE, E, SE, S, SW, W, NW. Если букв, задающих сторону привязки, две, то вторая определяет вертикальную привязку (вверх или вниз «уйдет» текст от заданной координаты). Свойство justify определяет лишь выравнивание текста относительно себя самого.

Создайте на холсте подобное изображение:

Для создания травы используется цикл.

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


Canvas. Идентификаторы, теги и анимация. Урок 10 курса «Tkinter»

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

В Tkinter существует два способа «пометить» фигуры, размещенные на холсте, – это идентификаторы и теги. Первые всегда уникальны для каждого объекта. Два объекта не могут иметь одни и тот же идентификатор. Теги не уникальны. Группа объектов на холсте может иметь один и тот же тег. Это дает возможность менять свойства всей группы. Отдельно взятая фигура на Canvas может иметь как идентификатор, так и тег.

Идентификаторы

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

from tkinter import *
root = Tk()
c = Canvas(width=300, height=300, 
           bg='white')
c.focus_set()
c.pack()
 
ball = c.create_oval(140, 140, 160, 160, 
                     fill='green')
c.bind('<Up>', 
       lambda event: c.move(ball, 0, -2))
c.bind('<Down>', 
       lambda event: c.move(ball, 0, 2))
c.bind('<Left>', 
       lambda event: c. move(ball, -2, 0))
c.bind('<Right>', 
       lambda event: c.move(ball, 2, 0))
 
root.mainloop()

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

ball. Метод move объекта Canvas принимает идентификатор и смещение по осям.

С помощью метода itemconfig можно изменять другие свойства. Метод coords устанавливает новые координаты фигуры, если они заданы. Если указывается только идентификатор или тег, то coords возвращает текущие координаты.

from tkinter import *
root = Tk()
c = Canvas(width=200, height=200,
           bg='white')
c.pack()
 
rect = c.create_rectangle(
    80, 80, 120, 120, fill='lightgreen')
 
 
def in_focus(event):
    c.itemconfig(rect, fill='green', width=2)
    c.coords(rect, 70, 70, 130, 130)
 
 
c.bind('<FocusIn>', in_focus)
 
root.mainloop()

Здесь при получении холстом фокуса (нажать Tab) изменится цвет и размер квадрата.

Теги

В отличие от идентификаторов, которые являются уникальными для каждого объекта, один и тот же тег может присваиваться разным объектам. Дальнейшее обращение к такому тегу позволит изменить все объекты, в которых он был указан. В примере ниже эллипс и линия содержат один и тот же тег, а функция color изменяет цвет всех объектов с тегом group1. Обратите внимание, что в отличие от имени идентификатора (переменная), имя тега заключается в кавычки (строковое значение).

from tkinter import *
 
 
def color(event):
     c.itemconfig('group1', width=3,
                  fill="red")
 
 
root = Tk()
c = Canvas(width=460, height=150, 
           bg='white')
c.pack()
oval = c.create_oval(30, 10, 130, 80, 
                     tag="group1")
c.create_line(10, 100, 450, 100, 
              tag="group1")
c.bind('<Button-3>', color)
root.mainloop()
 

Метод tag_bind позволяет привязать событие (например, щелчок кнопкой мыши) к определенной фигуре на Canvas. Таким образом, можно реализовать обращение к различным областям холста с помощью одного и того же события. Пример ниже иллюстрирует, как изменения на холсте зависят от того, где произведен клик.

from tkinter import *
 
 
def oval_func(event):
    c.delete(oval)
    c.create_text(80, 50,
                  text="Круг")
 
 
def rect_func(event):
    c.delete("rect")
    c.create_text(230, 50,
                  text="Прямоугольник")
 
 
def triangle(event):
    c.delete(trian)
    c.create_text(380, 50,
                  text="Треугольник")
 
 
c = Canvas(width=460, height=100,
           bg='grey80')
c.pack()
 
oval = c.create_oval(30, 10, 130, 80,
                     fill="orange")
c.create_rectangle(180, 10, 280, 80,
                   tag="rect",
                   fill="lightgreen")
trian = c.create_polygon(
    330, 80, 380, 10, 430, 80,
    fill='white', outline="black")
 
c.tag_bind(oval, '<Button-1>', oval_func)
c.tag_bind("rect", '<Button-1>', rect_func)
c.tag_bind(trian, '<Button-1>', triangle)
 
mainloop()
 

Метод delete удаляет объект. Если нужно очистить холст, то вместо идентификаторов или тегов используется константа ALL.

Практическая работа. Анимация в tkinter

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

from tkinter import *
 
 
def motion():
    c.move(ball, 1, 0)
    if c.coords(ball)[2] < 300:
        root.after(10, motion)
 
 
root = Tk()
c = Canvas(root, width=300, height=200, 
           bg="white")
c.pack()
ball = c.create_oval(0, 100, 40, 140, 
                     fill='green')
motion()
root.mainloop()

Выражение c.coords(ball) возвращает список текущих координат объекта (в данном случае это ball). Третий элемент списка соответствует его второй координате x.

Метод after вызывает функцию, переданную вторым аргументом, через количество миллисекунд, указанных первым аргументом.

Изучите приведенную программу и самостоятельно запрограммируйте постепенное движение фигуры в ту точку холста, где пользователь кликает левой кнопкой мыши. Координаты события хранятся в его атрибутах x и y (event.x, event.y).

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


Маркизы | C&C Canvas

Позвольте нам решить все ваши потребности в навесах

В C&C Canvas мы предлагаем полный спектр услуг для коммерческих и жилых навесов. Мы можем выполнить все, от проектирования, строительства и установки до ремонта:

  • Коммерческие маркизы
  • Патио маркизы
  • Входные маркизы
  • Жилые маркизы
  • Световые маркизы
  • 90 90
  • Выдвижные маркизы 0002 Индивидуальный дизайн и установка навеса

    У вас есть изогнутый фасад здания, очень большое патио или обычная цветовая гамма вашего дома или офиса? Независимо от того, насколько сложными могут показаться ваши требования к навесу, специалисты C&C Canvas помогут вам спроектировать идеальный навес для жилого или коммерческого помещения. Позвольте нам помочь вам украсить вашу собственность красивым и функциональным навесом.

    Готовы начать? Свяжитесь с нами сегодня!

    Специалист по ремонту навесов

    Если у вас уже есть коммерческий или жилой навес, возможно, вы ищете надежного подрядчика, который поможет вам обновить или отремонтировать навес. В C & C Canvas мы можем помочь во всем, от структурного ремонта и замены ткани до полного изменения дизайна навеса. Может быть, вы хотите обновить свою цветовую схему, добавить новый логотип в свой тент или расширить его зону покрытия. Или, возможно, вам нужно заменить стареющую ткань на высококачественный продукт, который будет выглядеть свежо и лучше противостоять непогоде. В любом случае, C&C Canvas может предоставить необходимые вам экспертные услуги.

    Навес для прохода в жилом доме
    Декоративный навес для окна в жилом доме
    Навес для патио в жилом доме 9003 8 54 99 9003 030
    Изогнутая оконная маркиза для жилых помещений
    Стандартная оконная маркиза для жилых помещений
    Жалюзи для жилых помещений

    Стандартные оконные маркизы для жилых помещений
    Коммерческий тент
    Коммерческий тент

    5030 9030 Коммерческий тент 90
    Коммерческий тент
    Коммерческий тент

    Коммерческий тент
    Коммерческий тент
    Коммерческий тент

    Навес для коммерческих помещений
    Навес для коммерческих помещений
    5
    Ресторанный дворик 9003 0030
    Коммерческий навес
    Коммерческий навес
    Коммерческий навес

    Торговые маркизы
    Ресторанная маркиза
    Навес для ресторана

    Навес для ресторана
    905 90 3034 Навес для ресторана 0
    Навесы для ресторанов

    Навесы для ресторанов
    Навесы для ресторанов
    Навес гастронома

    Декоративный навес для жилых помещений
    Навес магазина
    Навес магазина

    90 305 3033 90 Навесы магазина
    Навес магазина
    Навес автомастерской

    Навес для отеля
    Навес для отеля
    Навес для террасы ресторана и шторы

    Барбекю в жилом доме

    Тесты Canvas – Canvas

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

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

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

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

    Новый редактор расширенного содержимого с отключенным кодом LaTex и HTML в новых викторинах

    Canvas отключил новый редактор расширенного содержимого в новых викторинах из-за ошибки, https://community. canvaslms.com/t5/The-Product-Blog/Turning-Off-the-New-Rich-Content-Editor-in- Новые викторины/ba-p/550133. Новые викторины теперь имеют предыдущую версию редактора расширенного содержимого.

    Когда переходить на новые викторины

    • Если вы только начинаете работать с викторинами Canvas, мы настоятельно рекомендуем вам использовать новые викторины
    • Если вы полагаетесь на стандартные типы вопросов; множественный выбор, множественный ответ, заполнение одного или нескольких пропусков, верно неверно или эссе
    • Если вы заинтересованы в опробовании новых типов вопросов викторины, категоризации, горячих точек и упорядочении или хотите добавить в викторину стимулирующий контент
    • Чтобы использовать новые настройки размещения для обучения, которые включают добавление или удаление времени для всех попыток прохождения теста, а также умножение временных ограничений на заданный множитель
    • Варианты переоценки теперь доступны практически для всех типов вопросов
    • Если вы в настоящее время используете классические тесты, которые не полагаются на банки вопросов

    Зачем продолжать использовать классические викторины

    • Если вам нужно преобразовать банки вопросов в банки заданий
    • Если вам нужно экспортировать аналитику викторины
    • Если вы хотите использовать опрос

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

    Новые викторины

    Новые викторины — это новый инструмент оценки, созданный для удовлетворения текущих и будущих потребностей в оценке в вашем классе.

    Новые усовершенствования функций включают в себя;

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

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

    Новые ресурсы для викторин

    • Холст Руководства по новым викторинам
      • Canvas New Quizzs Video Обзор
    • 2021 PDI New Quizzes Обзор видео
    • Обзор новых викторин
    • Варианты переноса классической викторины и банка вопросов

    Прокторинг для новых викторин

    Respondus LockDown Browser + Monitor работает с новыми викторинами.

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

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